工具类:时间和日期的获取

public class DateUtil {

    public static final String DATE_FORMAT = "yyyy-MM-dd";
    private static SimpleDateFormat sdf = new SimpleDateFormat("MM/dd");
    private static SimpleDateFormat sdf2 = new SimpleDateFormat("yyyy/MM/dd");

    /**
     * 获取当前时间
     */
    public static long getCurrentTime() {
        try {
            return SystemClock.elapsedRealtime();
        } catch (Exception var3) {
            var3.printStackTrace();
            return System.currentTimeMillis();
        }
    }

    public static String getCurrentTime(String format) {
        return new SimpleDateFormat(format).format(new Date(getCurrentTime()));
    }


    /**
     * 获取今天(yyyy-MM-dd)的时间戳
     */
    public static long getCurrentDate(Context context) {
        String currentTime = DateUtil.getCurrentTime(DateUtil.DATE_FORMAT);
        SimpleDateFormat df = new SimpleDateFormat("yyyy-MM-dd");
        try {
            Date currentDate = df.parse(currentTime);
            return currentDate.getTime();
        } catch (ParseException e) {
            e.printStackTrace();
        }
        return new Date().getTime();
    }

    /**
     * 获取某年第一天日期
     */
    public static Date getYearFirst(int year) {
        Calendar calendar = Calendar.getInstance();
        calendar.clear();
        calendar.set(Calendar.YEAR, year);
        Date currYearFirst = calendar.getTime();
        return currYearFirst;
    }

    /**
     * 获取某年最后一天日期
     */
    public static Date getYearLast(int year) {
        Calendar calendar = Calendar.getInstance();
        calendar.clear();
        calendar.set(Calendar.YEAR, year);
        calendar.roll(Calendar.DAY_OF_YEAR, -1);
        Date currYearLast = calendar.getTime();

        return currYearLast;
    }

    /**
     * 获取当前时间所在年的周数
     */
    public static int getWeekOfYear(Date date) {
        Calendar c = new GregorianCalendar();
        c.setFirstDayOfWeek(Calendar.MONDAY);
        c.setMinimalDaysInFirstWeek(7);
        c.setTime(date);

        return c.get(Calendar.WEEK_OF_YEAR);
    }

    /**
     * 获取当前时间所在年的最大周数
     */
    public static int getMaxWeekNumOfYear(int year) {
        Calendar c = new GregorianCalendar();
        c.set(year, Calendar.DECEMBER, 31, 23, 59, 59);
        return getWeekOfYear(c.getTime());
    }

    /**
     * 获取某年的第几周的开始日期
     */
    public static Date getFirstDayOfWeek(int year, int week) {
        Calendar c = getFirstDayOfWeek(year);
        Calendar cal = (GregorianCalendar) c.clone();
        cal.add(Calendar.DATE, week * 7);

        return getFirstDayOfWeek(cal.getTime());
    }

    /**
     * 获取某年的第几周的结束日期
     */
    public static Date getLastDayOfWeek(int year, int week) {
        Calendar c = getFirstDayOfWeek(year);
        Calendar cal = (GregorianCalendar) c.clone();
        cal.add(Calendar.DATE, week * 7);

        return getLastDayOfWeek(cal.getTime());
    }

    /**
     * 获取一年开始的第一周的周一
     * 第一周如果有四天或以上就算是该年的第一周,
     * 否则就是上一年的最后一周(用于跨年判断第一周开始时间)
     */
    public static Calendar getFirstDayOfWeek(int year) {
        Calendar c = new GregorianCalendar();
        c.set(year, Calendar.JANUARY, 1, 0, 0, 0);
        int dayOfWeek = c.get(Calendar.DAY_OF_WEEK);
        // 如果1月1日是周五,周六或者周日,那么这一周是上一年最后一周,重新计算今年的第一周开始的周一
        if (dayOfWeek == Calendar.FRIDAY || dayOfWeek == Calendar.SATURDAY || dayOfWeek == Calendar.SUNDAY) {
            while (c.get(Calendar.DAY_OF_WEEK) != Calendar.MONDAY) {
                c.add(Calendar.DAY_OF_YEAR, 1);
            }
        }
        return c;
    }

    /**
     * 获取当前时间所在周的开始日期
     */
    public static Date getFirstDayOfWeek(Date date) {
        Calendar c = new GregorianCalendar();
        c.setFirstDayOfWeek(Calendar.MONDAY);
        c.setTime(date);
        c.set(Calendar.DAY_OF_WEEK, c.getFirstDayOfWeek()); // Monday
        return c.getTime();
    }

    /**
     * 获取当前时间所在周的结束日期
     */
    @SuppressLint("WrongConstant")
    public static Date getLastDayOfWeek(Date date) {
        Calendar c = new GregorianCalendar();
        c.setFirstDayOfWeek(Calendar.MONDAY);
        c.setTime(date);
        c.set(Calendar.DAY_OF_WEEK, c.getFirstDayOfWeek() + 6); // Sunday
        return c.getTime();
    }

    /**
     * 判断该年的最后一天(xxxx年12月31日)所在的周是不是当年的最后一周,
     * 否则就是下一年的第一周
     */
    public static boolean isLastDayInYearLastWeek(Date lastDate) {
        boolean result = false;
        Calendar c = new GregorianCalendar();
        c.setTime(lastDate);
        int lastDay = c.get(Calendar.DAY_OF_WEEK);
        // 当lastDay是周四、五、六、日, 它所在周就是是该年的最后一周
        if (lastDay == Calendar.THURSDAY || lastDay == Calendar.FRIDAY || lastDay == Calendar.SATURDAY || lastDay == Calendar.SUNDAY) {
            result = true;
        }
        return result;
    }

    /**
     * 获取一年的最后一天
     */
    public static Date getLastDayOfYear(int year) {
        Calendar c = new GregorianCalendar();
        c.set(year, Calendar.DECEMBER, 31, 0, 0, 0);
        return c.getTime();
    }

    /**
     * 判断当前时间是否在[startTime, endTime]区间,注意时间格式要一致
     */
    public static boolean isEffectiveDate(Date nowTime, Date startTime, Date endTime) {
        if (Math.abs(nowTime.getTime() - startTime.getTime()) < 1000 ||
                Math.abs(nowTime.getTime() - endTime.getTime()) < 1000) {
            return true;
        }

        Calendar date = new GregorianCalendar();
        date.setTime(nowTime);

        Calendar begin = new GregorianCalendar();
        begin.setTime(startTime);

        Calendar end = new GregorianCalendar();
        end.setTime(endTime);

        if (date.after(begin) && date.before(end)) {
            return true;
        } else {
            return false;
        }
    }

    /**
     * 获取一年第一周的第一天 和 最后一周的最后一天
     */
    public static Date[] getYearMinDayAndMasDay(int currentYear) {
        Date[] resultDate = new Date[2];
        List<Week> weeks = getWeeksByYear(currentYear);
        Week week0 = weeks.get(0);
        Week week1 = weeks.get(weeks.size() - 1);
        Date minDate = week0.getWeekBeginDate();
        Date maxDate = week1.getWeekEndDate();
        resultDate[0] = minDate;
        resultDate[1] = maxDate;
        return resultDate;
    }

    /**
     * 根据当前日期算出所在周的开始时间和结束时间
     */
    public static String[] getWeekStartAndEndDay(Date currentDate) {
        String[] weekDay = new String[2];
        Date firstDayOfWeek = DateUtil.getFirstDayOfWeek(currentDate);
        Date lastDayOfWeek = DateUtil.getLastDayOfWeek(currentDate);
        weekDay[0] = sdf2.format(firstDayOfWeek.getTime());
        weekDay[1] = sdf2.format(lastDayOfWeek.getTime());
        return weekDay;
    }

    /**
     * 获取一年中每周的范围
     */
    public static List<Week> getWeeksByYear(int currentYear) {
        ArrayList<Week> weekList = new ArrayList<>();
        Date lastDay = DateUtil.getLastDayOfYear(currentYear);
        boolean result = DateUtil.isLastDayInYearLastWeek(lastDay);
        // 一年最多有53个星期
        for (int i = 0; i < 53; i++) {
            Date firstDayOfWeek = DateUtil.getFirstDayOfWeek(currentYear, i);
            Date lastDayOfWeek = DateUtil.getLastDayOfWeek(currentYear, i);

            Calendar startCal = Calendar.getInstance();
            startCal.setTime(firstDayOfWeek);
            Calendar endCal = Calendar.getInstance();
            endCal.setTime(lastDayOfWeek);
            String WeekNumStr = String.valueOf(i + 1);
            if (i < 9) {
                WeekNumStr = "0" + (i + 1);
            }
            Week everyWeek = new Week();
            everyWeek.setBeginYear(startCal.get(Calendar.YEAR));
            everyWeek.setEndYear(endCal.get(Calendar.YEAR));
            everyWeek.setWeekBegin(sdf.format(startCal.getTime()));
            everyWeek.setWeekEnd(sdf.format(endCal.getTime()));
            everyWeek.setWeekNum(WeekNumStr);
            if (i <= 50) {
                weekList.add(everyWeek);
            }
            if (i > 50) {
                // 判断最后一天是否在这区间内
                if (DateUtil.isEffectiveDate(lastDay, firstDayOfWeek, lastDayOfWeek)) {
                    // 判断该年的最后一天(xxxx年12月31日)所在的周是不是当年的最后一周
                    if (result) {
                        weekList.add(everyWeek);
                    }
                    break;
                } else {
                    weekList.add(everyWeek);
                }
            }

        }
        return weekList;
    }
    
}
public class Week {

    private String weekNum;
    private int beginYear;
    private int endYear;
    // 周开始日期 格式: MM/dd
    private String weekBegin;
    // 周结束日期 格式: MM/dd
    private String weekEnd;

    public String getWeekNum() {
        return weekNum;
    }

    public void setWeekNum(String weekNum) {
        this.weekNum = weekNum;
    }

    public int getBeginYear() {
        return beginYear;
    }

    public void setBeginYear(int beginYear) {
        this.beginYear = beginYear;
    }

    public int getEndYear() {
        return endYear;
    }

    public void setEndYear(int endYear) {
        this.endYear = endYear;
    }

    public String getWeekBegin() {
        return weekBegin;
    }

    public void setWeekBegin(String weekBegin) {
        this.weekBegin = weekBegin;
    }

    public String getWeekEnd() {
        return weekEnd;
    }

    public void setWeekEnd(String weekEnd) {
        this.weekEnd = weekEnd;
    }

    @Override
    public String toString() {
        return weekBegin + " ~ " + weekEnd + "(第" + weekNum + "周)";
    }

    /**
     * 获取周开始日期 (yyyy/MM/dd)
     * @return
     */
    public Date getWeekBeginDate() {
        SimpleDateFormat formatter = new SimpleDateFormat("yyyy/MM/dd");
        String strDate = beginYear + "/" + weekBegin;
        Date date = new Date();
        try {
            date = formatter.parse(strDate);
        } catch (ParseException e) {
            e.printStackTrace();
        }
        return date;
    }

    /**
     * 获取周结束日期 (yyyy/MM/dd)
     * @return
     */
    public Date getWeekEndDate() {
        SimpleDateFormat formatter = new SimpleDateFormat("yyyy/MM/dd");
        String strDate = endYear + "/" + weekEnd;
        Date date = new Date();
        try {
            date = formatter.parse(strDate);
        } catch (ParseException e) {
            e.printStackTrace();
        }
        return date;
    }

    /**
     * 获取周开始日期 (yyyy/MM/dd)
     * @return
     */
    public String getWeekBeginStr() {
        String strDate = beginYear + "/" + weekBegin;
        return strDate;
    }


    /**
     * 获取周结束日期 (yyyy/MM/dd)
     * @return
     */
    public String getWeekEndStr() {
        String strDate = endYear + "/" + weekEnd;
        return strDate;
    }
}

猜你喜欢

转载自blog.csdn.net/yaojie5519/article/details/82805911
今日推荐