Java常用日期工具实现

  1. 获取今日日期
  2. 获取本月第一天日期
  3. 获取本月最后一天日期
  4. date转日期字符串
  5. 日期字符串转date
  6. 日期字符串格式化
  7. 根据date获取past天前的日期
  8. 获取当前年周数:yyyy-w
  9. 获取范围时间内的日期集合
public class MyDateUtils {
    public static final String NORMAL_DATE_FORMAT = "yyyy-MM-dd";
    public static final String NORMAL_DATE_TIME_FORMAT = "yyyy-MM-dd HH:mm";

    /**
     * 获取今日日期 yyyy-MM-dd
     */
    public static String getToday() {
        return LocalDate.now().toString();
    }

    /**
     * 获取本月第一天日期 2019-11-01
     */
    public static String getFirstDayOfMonth() {
        return LocalDate.now().with(TemporalAdjusters.firstDayOfMonth()).toString();
    }

    /**
     * 获取本月最后一天日期 2019-11-30
     */
    public static String getLastDayOfMonth() {
        return LocalDate.now().with(TemporalAdjusters.lastDayOfMonth()).toString();
    }

    /**
     * date转字符串
     */
    public static String dateToDateStr(Date date, String format) {
        DateTimeFormatter dateTimeFormatter = DateTimeFormatter.ofPattern(format);
        Instant instant = date.toInstant();
        ZoneId zoneId = ZoneId.systemDefault();
        LocalDateTime localDateTime = LocalDateTime.ofInstant(instant, zoneId);
        return dateTimeFormatter.format(localDateTime);
    }

    public static String dateToDateStr(Date date) {
        return dateToDateStr(date, NORMAL_DATE_FORMAT);
    }

    /**
     * 日期字符串转date
     */
    public static Date dateStrToDate(String dateStr, String format) {
        DateTimeFormatter dateDtf = DateTimeFormatter.ofPattern(format);
        LocalDateTime localDateTime = LocalDateTime.parse(dateStr, dateDtf);
        ZoneId zone = ZoneId.systemDefault();
        Instant instant = localDateTime.atStartOfDay(zone).toInstant();
        return Date.from(instant);
    }

    public static Date dateStrToDate(String dateStr) {
        return dateStrToDate(dateStr, NORMAL_DATE_FORMAT);
    }

    /**
     * 日期字符串格式化
     */
    public static String dateToStr(Long timestamp, String format) {
        DateTimeFormatter dateTimeFormatter = DateTimeFormatter.ofPattern(format);
        Date date = new Date(timestamp);
        Instant instant = date.toInstant();
        ZoneId zoneId = ZoneId.systemDefault();
        LocalDateTime localDateTime = LocalDateTime.ofInstant(instant, zoneId);
        return dateTimeFormatter.format(localDateTime);
    }

    /**
     * 根据date获取past天前的日期
     */
    public static Date getPastDate(Date date, int past) {
        Calendar calendar = Calendar.getInstance();
        calendar.setTime(date);
        calendar.set(Calendar.DAY_OF_YEAR, calendar.get(Calendar.DAY_OF_YEAR) - past);
        return calendar.getTime();
    }

    public static String getPastDate(String dateStr, int past) {
        Date date = dateStrToDate(dateStr);
        return dateToDateStr(getPastDate(date, past));
    }

    public static String getYesterday(String dateStr) {
        return getPastDate(dateStr, 1);
    }
    
    /**
     * 当前年周数:yyyy-w
     */
    public static String getYearWeek(Date date) {
        Calendar cal = Calendar.getInstance();
        cal.setTime(date);
        //设置一周的第一天是周一
        cal.setFirstDayOfWeek(Calendar.MONDAY);

        int year = cal.get(Calendar.YEAR);
        int week = cal.get(Calendar.WEEK_OF_YEAR);

        cal.add(Calendar.DAY_OF_MONTH, -7);  //上一周

        //判断是否同一年,并且本周周数小于上周周数,则在上周周数的基础上加一
        if (year == cal.get(Calendar.YEAR) && week < cal.get(Calendar.WEEK_OF_YEAR)) {
            week = cal.get(Calendar.WEEK_OF_YEAR) + 1;
        }
        
        return year + "-" + week;
    }

    /**
     * 获取范围时间内的日期集合
     */
    public static List<String> getBetweenDays(String startDate, String endDate) {
        if (StringUtils.isBlank(startDate) || StringUtils.isBlank(endDate)) {
            return Collections.emptyList();
        }

        Date start = dateStrToDate(startDate);
        Date end = dateStrToDate(endDate);

        if (start.compareTo(end) > 0) {
            return Collections.emptyList();
        }

        // 返回的日期集合
        List<String> days = new ArrayList<>();
        Calendar tempStart = Calendar.getInstance();
        tempStart.setTime(start);

        Calendar tempEnd = Calendar.getInstance();
        tempEnd.setTime(end);
        tempEnd.add(Calendar.DATE, 1);
        while (tempStart.before(tempEnd)) {
            days.add(dateToDateStr(tempStart.getTime()));
            tempStart.add(Calendar.DAY_OF_YEAR, 1);
        }

        return days;
    }

}

评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

@从入门到入土

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值