LocalDate()

  • 获取当前时间
  • 时间转化
  • 创建指定的日期和时间
  • 字符串转时间
  • ISO 8601日期格式
  • 按自己的格式互转(字符2日期)
  • 时间加减计算
  • 指定时间
  • 实用方法
  • 计算时间间隔获取几年几个月几日几时几分
  • 获取几年几个月几日几时几分
  • 2个时间比较

获取当前时间

System.out.println(“当前时间(到日-2022-10-21):”+ LocalDate.now());
System.out.println(“当前时间(时分秒.3位毫秒-17:48:24.631):”+ LocalTime.now());
System.out.println(“当前时间(时分秒.3位毫秒,T分割-2022-10-21T17:48:24.632):”+ LocalDateTime.now());

System.out.println(“当前时间(到日-2022-10-21):”+ LocalDate.now());
System.out.println(“当前时间(时分秒.3位毫秒-17:48:24.631):”+ LocalTime.now());
System.out.println(“当前时间(时分秒.3位毫秒,T分割-2022-10-21T17:48:24.632):”+ LocalDateTime.now());

时间转化

LocalDateTime dateTime = LocalDateTime.now();
System.out.println(“年月日时分秒2日:”+ dateTime.toLocalDate());
System.out.println(“年月日时分秒2时分秒.3位毫秒:”+ dateTime.toLocalTime());

LocalDateTime dateTime = LocalDateTime.now();
System.out.println(“年月日时分秒2日:”+ dateTime.toLocalDate());
System.out.println(“年月日时分秒2时分秒.3位毫秒:”+ dateTime.toLocalTime());

创建指定的日期和时间

// 2023-12-12

 // 2023-12-12
    LocalDate date = LocalDate.of(2023, 12, 12);
    int year = date.getYear();
    // 有数字和DECEMBER
    Month month = date.getMonth();
    date.getDayOfMonth();
    // 23:59:59
    LocalTime time = LocalTime.of(22, 59, 59);
    // of可以传各种参数
    LocalDateTime dateTime = LocalDateTime.of(2022, 12, 30, 1, 59, 59);
// LocalDate+LocalTime:2023-12-12T22:59:59(.toString()也是这个格式)
    LocalDateTime dateTime = LocalDateTime.of(date, time);

字符串转时间

LocalDateTime dt = LocalDateTime.parse(“2019-11-19T15:16:17”);
LocalDate d = LocalDate.parse(“2019-11-19”);
LocalTime t = LocalTime.parse(“15:16:17”);

ISO 8601日期格式

注意:ISO 8601规定的日期和时间分隔符是T。标准格式如下:
日期:yyyy-MM-dd
时间:HH:mm:ss
带毫秒的时间:HH:mm:ss.SSS
日期和时间:yyyy-MM-dd’T’HH:mm:ss
带毫秒的日期和时间:yyyy-MM-dd’T’HH:mm:ss.SSS

按自己的格式互转(字符2日期)

DateTimeFormatter pattern = DateTimeFormatter.ofPattern(“yyyy-MM-dd HH:mm:ss”);
// LocalDateTime按照指定格式转字符(秒==LocalDateTime,日==LocalDate)
String str = pattern.format(LocalDateTime.now());
// 指定格式的时间字符转日期
LocalDateTime dt2 = LocalDateTime.parse(“2020-10-20 15:16:17”, pattern);
System.out.println(“字符转指定时间格式:”+dt2);
// 字符转日期(可截取保留日)
// 字符串和格式类模板必须一致
LocalDate dt3 = LocalDate.parse(“2020-10-20 15:16:17”, pattern);
// 会报错 “yyyy-MM-dd HH:mm:ss” 无法转 年月日
LocalDate dt4 = LocalDate.parse(“2020-10-20”, pattern);

时间加减计算

参数为负数则减

  • 方式一
    LocalDateTime plusYearsResult = localDateTime.plusYears(2L);
    LocalDateTime plusMonthsResult = localDateTime.plusMonths(3L);
    LocalDateTime plusDaysResult = localDateTime.plusDays(7L);
    LocalDateTime plusHoursResult = localDateTime.plusHours(2L);
    LocalDateTime plusMinutesResult = localDateTime.plusMinutes(10L);
    LocalDateTime plusSecondsResult = localDateTime.plusSeconds(10L);
  • 方式二
    LocalDateTime nextMonth = localDateTime.plus(1, ChronoUnit.MONTHS);
    LocalDateTime nextYear = localDateTime.plus(1, ChronoUnit.YEARS);

指定时间

LocalDate localDate = LocalDate.now();
//当前时间基础上,指定本年当中的第几天,取值范围为1-365,366
LocalDate withDayOfYearResult = localDate.withDayOfYear(200);
//当前时间基础上,指定本月当中的第几天,取值范围为1-29,30,31
LocalDate withDayOfMonthResult = localDate.withDayOfMonth(5);
//当前时间基础上,直接指定年份
LocalDate withYearResult = localDate.withYear(2017);
//当前时间基础上,直接指定月份
// 调整月份时,会相应地调整日期,即把2019-10-31的月份调整为2时,日期也自动变为28或29
LocalDate withMonthResult = localDate.withMonth(5);

LocalTime localTime = LocalTime.now();
//当前时间基础上,直接指定小时
LocalTime withHourResult = localTime.withHour(1);
//当前时间基础上,直接指定分钟
LocalTime withMinuteResult = localTime.withMinute(15);
//当前时间基础上,直接指定秒
LocalTime withSecondResult = localTime.withSecond(20);

实用方法

// 本月第一天0:00时刻:
LocalDateTime firstDay = LocalDate.now().withDayOfMonth(1).atStartOfDay();
// 今天0:00
LocalDateTime atStartOfDay = LocalDate.now().atStartOfDay();
// 今天的最后一秒
LocalDateTime time = LocalDate.now().plusDays(1L).atStartOfDay().plusSeconds(-1L);

// 昨天的0:00
LocalDateTime yesterDay = LocalDate.now().plusDays(-1L).atStartOfDay();
// 本月最后1天:
LocalDate lastDay = LocalDate.now().with(TemporalAdjusters.lastDayOfMonth());

// 下月第1天:
LocalDate nextMonthFirstDay = LocalDate.now().with(TemporalAdjusters.firstDayOfNextMonth());

// 本月第1个周一:
LocalDate firstWeekday = LocalDate.now().with(TemporalAdjusters.firstInMonth(DayOfWeek.MONDAY));

  • 获取某一天,正负n天的最后一秒(23:59:59)
/**
     *
     * @param day 日期
     * @param num 加减天数 -n,0,n
     * @return null 或 格式 2022-10-21T23:59:59
     */
    public static LocalDateTime getDateLastTime(LocalDate day, long num){
        if (null == day) {
            return null;
        }
        return day.plusDays(1L).atStartOfDay().plusSeconds(-1L);
    }
  • 获取某一天,正负n天的0:00
 /**
     * 获取某一天,正负n天的0:00(没有秒)
     * @param day 日期
     * @param num 加减天数 -n,0,n
     * @return 格式 2022-10-21T00:00
     */
    public static LocalDateTime getDateAtStartTime(LocalDate day, long num){
        if (null == day) {
            return null;
        }
        return day.plusDays(num).atStartOfDay();
    }
  • 获取某一天,正负n天的最后一秒(23:59:59)字符串
  /**
     * 获取某一天,正负n天的最后一秒字符(23:59:59)
     * @param day
     * @param num
     * @param patternStr 时间格式 (null默认 yyyy-MM-dd HH:mm:ss)
     * @return
     */
    public static String getDateLastTimeStr(LocalDate day, long num, String patternStr){
        LocalDateTime time = getDateLastTime(day, num);

        if (time == null) {
            return "";
        }
        String patternStr2 = "yyyy-MM-dd HH:mm:ss";
        if (patternStr != null && !patternStr.isEmpty()) {
            patternStr2 = patternStr;
        }
        DateTimeFormatter pattern = DateTimeFormatter.ofPattern(patternStr2);
        return pattern.format(time);
    }
  • 获取某一天,正负n天的00:00:00字符
    /**
     * 获取某一天,正负n天的00:00:00字符
     * @param day
     * @param num
     * @param patternStr 日期格式(null 默认"yyyy-MM-dd HH:mm:ss" )
     * @return ""  或 "yyyy-MM-dd HH:mm:ss" 或 patternStr格式
     */
    public static String getDateAtStartTimeStr(LocalDate day, long num, String patternStr){
        LocalDateTime time = getDateAtStartTime(day, num);
        if (time == null) {
            return "";
        }

        String patternStr2 = "yyyy-MM-dd HH:mm:ss";
        if (patternStr != null && !patternStr.isEmpty()) {
            patternStr2 = patternStr;
        }
        DateTimeFormatter pattern = DateTimeFormatter.ofPattern(patternStr2);
        return pattern.format(time);
    }

计算时间间隔

//计算两个日期的日期间隔-年月日
LocalDate date1 = LocalDate.of(2020, 10, 21);
LocalDate date2 = LocalDate.of(2019, 9, 11);
//内部是用date2-date1,所以得到的结果是负数
Period period = Period.between(date1, date2);
System.out.println(“相差年数 : ” + period.getYears());
System.out.println(“相差月数 : ” + period.getMonths());
System.out.println(“相差日数 : ” + period.getDays());
//另一种计算方式和表现形式
System.out.println(“——————————-“);
long years = period.get(ChronoUnit.YEARS);
long months = period.get(ChronoUnit.MONTHS);
long days = period.get(ChronoUnit.DAYS);
System.out.println(“相差的年月日分别为 : ” + years + “,” + months + “,” + days);

//计算两个日期的日期间隔-年月日
LocalDate date1 = LocalDate.of(2020, 10, 21);
LocalDate date2 = LocalDate.of(2019, 9, 11);
//内部是用date2-date1,所以得到的结果是负数
Period period = Period.between(date1, date2);
System.out.println(“相差年数 : ” + period.getYears());
System.out.println(“相差月数 : ” + period.getMonths());
System.out.println(“相差日数 : ” + period.getDays());
//另一种计算方式和表现形式
System.out.println(“——————————-“);
long years = period.get(ChronoUnit.YEARS);
long months = period.get(ChronoUnit.MONTHS);
long days = period.get(ChronoUnit.DAYS);
System.out.println(“相差的年月日分别为 : ” + years + “,” + months + “,” + days);

获取几年几个月几日几时几分

并没有获得秒差,没有该方法,不过可以通过毫秒换算

//计算两个时间的间隔
System.out.println(“——————————-“);
LocalDateTime date3 = LocalDateTime.now();
LocalDateTime date4 = LocalDateTime.of(2018, 1, 13, 22, 30, 10);
Duration duration = Duration.between(date3, date4);
System.out.println(date3 + ” 与 ” + date4 + ” 间隔 ” + “\n”
+ ” 天 :” + duration.toDays() + “\n”
+ ” 时 :” + duration.toHours() + “\n”
+ ” 分 :” + duration.toMinutes() + “\n”
+ ” 毫秒 :” + duration.toMillis() + “\n”
+ ” 纳秒 :” + duration.toNanos() + “\n”
);

//计算两个时间的间隔
System.out.println(“——————————-“);
LocalDateTime date3 = LocalDateTime.now();
LocalDateTime date4 = LocalDateTime.of(2018, 1, 13, 22, 30, 10);
Duration duration = Duration.between(date3, date4);
System.out.println(date3 + ” 与 ” + date4 + ” 间隔 ” + “\n”
+ ” 天 :” + duration.toDays() + “\n”
+ ” 时 :” + duration.toHours() + “\n”
+ ” 分 :” + duration.toMinutes() + “\n”
+ ” 毫秒 :” + duration.toMillis() + “\n”
+ ” 纳秒 :” + duration.toNanos() + “\n”
);

2个时间比较

isBefore
isAfter
// 今天0:00
LocalDate now = LocalDate.now();
LocalDateTime atStartOfDay = now.atStartOfDay();
// 今天的最后一秒
LocalDateTime lastTime = LocalDate.now().plusDays(1L).atStartOfDay().plusSeconds(-1L);
System.out.println(“LocalDate当前时间小于3天后:”+now.isBefore(now.plusDays(3)));
System.out.println(“LocalDateTime,0点大于今天最后一秒:”+atStartOfDay.isAfter(lastTime));

————————
  • 获取当前时间
  • 时间转化
  • 创建指定的日期和时间
  • 字符串转时间
  • ISO 8601日期格式
  • 按自己的格式互转(字符2日期)
  • 时间加减计算
  • 指定时间
  • 实用方法
  • 计算时间间隔获取几年几个月几日几时几分
  • 获取几年几个月几日几时几分
  • 2个时间比较

获取当前时间

System.out.println(“当前时间(到日-2022-10-21):”+ LocalDate.now());
System.out.println(“当前时间(时分秒.3位毫秒-17:48:24.631):”+ LocalTime.now());
System.out.println(“当前时间(时分秒.3位毫秒,T分割-2022-10-21T17:48:24.632):”+ LocalDateTime.now());

System.out.println(“当前时间(到日-2022-10-21):”+ LocalDate.now());
System.out.println(“当前时间(时分秒.3位毫秒-17:48:24.631):”+ LocalTime.now());
System.out.println(“当前时间(时分秒.3位毫秒,T分割-2022-10-21T17:48:24.632):”+ LocalDateTime.now());

时间转化

LocalDateTime dateTime = LocalDateTime.now();
System.out.println(“年月日时分秒2日:”+ dateTime.toLocalDate());
System.out.println(“年月日时分秒2时分秒.3位毫秒:”+ dateTime.toLocalTime());

LocalDateTime dateTime = LocalDateTime.now();
System.out.println(“年月日时分秒2日:”+ dateTime.toLocalDate());
System.out.println(“年月日时分秒2时分秒.3位毫秒:”+ dateTime.toLocalTime());

创建指定的日期和时间

// 2023-12-12

 // 2023-12-12
    LocalDate date = LocalDate.of(2023, 12, 12);
    int year = date.getYear();
    // 有数字和DECEMBER
    Month month = date.getMonth();
    date.getDayOfMonth();
    // 23:59:59
    LocalTime time = LocalTime.of(22, 59, 59);
    // of可以传各种参数
    LocalDateTime dateTime = LocalDateTime.of(2022, 12, 30, 1, 59, 59);
// LocalDate+LocalTime:2023-12-12T22:59:59(.toString()也是这个格式)
    LocalDateTime dateTime = LocalDateTime.of(date, time);

字符串转时间

LocalDateTime dt = LocalDateTime.parse(“2019-11-19T15:16:17”);
LocalDate d = LocalDate.parse(“2019-11-19”);
LocalTime t = LocalTime.parse(“15:16:17”);

ISO 8601日期格式

注意:ISO 8601规定的日期和时间分隔符是T。标准格式如下:
日期:yyyy-MM-dd
时间:HH:mm:ss
带毫秒的时间:HH:mm:ss.SSS
日期和时间:yyyy-MM-dd’T’HH:mm:ss
带毫秒的日期和时间:yyyy-MM-dd’T’HH:mm:ss.SSS

按自己的格式互转(字符2日期)

DateTimeFormatter pattern = DateTimeFormatter.ofPattern(“yyyy-MM-dd HH:mm:ss”);
// LocalDateTime按照指定格式转字符(秒==LocalDateTime,日==LocalDate)
String str = pattern.format(LocalDateTime.now());
// 指定格式的时间字符转日期
LocalDateTime dt2 = LocalDateTime.parse(“2020-10-20 15:16:17”, pattern);
System.out.println(“字符转指定时间格式:”+dt2);
// 字符转日期(可截取保留日)
// 字符串和格式类模板必须一致
LocalDate dt3 = LocalDate.parse(“2020-10-20 15:16:17”, pattern);
// 会报错 “yyyy-MM-dd HH:mm:ss” 无法转 年月日
LocalDate dt4 = LocalDate.parse(“2020-10-20”, pattern);

时间加减计算

参数为负数则减

  • 方式一
    LocalDateTime plusYearsResult = localDateTime.plusYears(2L);
    LocalDateTime plusMonthsResult = localDateTime.plusMonths(3L);
    LocalDateTime plusDaysResult = localDateTime.plusDays(7L);
    LocalDateTime plusHoursResult = localDateTime.plusHours(2L);
    LocalDateTime plusMinutesResult = localDateTime.plusMinutes(10L);
    LocalDateTime plusSecondsResult = localDateTime.plusSeconds(10L);
  • 方式二
    LocalDateTime nextMonth = localDateTime.plus(1, ChronoUnit.MONTHS);
    LocalDateTime nextYear = localDateTime.plus(1, ChronoUnit.YEARS);

指定时间

LocalDate localDate = LocalDate.now();
//当前时间基础上,指定本年当中的第几天,取值范围为1-365,366
LocalDate withDayOfYearResult = localDate.withDayOfYear(200);
//当前时间基础上,指定本月当中的第几天,取值范围为1-29,30,31
LocalDate withDayOfMonthResult = localDate.withDayOfMonth(5);
//当前时间基础上,直接指定年份
LocalDate withYearResult = localDate.withYear(2017);
//当前时间基础上,直接指定月份
// 调整月份时,会相应地调整日期,即把2019-10-31的月份调整为2时,日期也自动变为28或29
LocalDate withMonthResult = localDate.withMonth(5);

LocalTime localTime = LocalTime.now();
//当前时间基础上,直接指定小时
LocalTime withHourResult = localTime.withHour(1);
//当前时间基础上,直接指定分钟
LocalTime withMinuteResult = localTime.withMinute(15);
//当前时间基础上,直接指定秒
LocalTime withSecondResult = localTime.withSecond(20);

实用方法

// 本月第一天0:00时刻:
LocalDateTime firstDay = LocalDate.now().withDayOfMonth(1).atStartOfDay();
// 今天0:00
LocalDateTime atStartOfDay = LocalDate.now().atStartOfDay();
// 今天的最后一秒
LocalDateTime time = LocalDate.now().plusDays(1L).atStartOfDay().plusSeconds(-1L);

// 昨天的0:00
LocalDateTime yesterDay = LocalDate.now().plusDays(-1L).atStartOfDay();
// 本月最后1天:
LocalDate lastDay = LocalDate.now().with(TemporalAdjusters.lastDayOfMonth());

// 下月第1天:
LocalDate nextMonthFirstDay = LocalDate.now().with(TemporalAdjusters.firstDayOfNextMonth());

// 本月第1个周一:
LocalDate firstWeekday = LocalDate.now().with(TemporalAdjusters.firstInMonth(DayOfWeek.MONDAY));

  • 获取某一天,正负n天的最后一秒(23:59:59)
/**
     *
     * @param day 日期
     * @param num 加减天数 -n,0,n
     * @return null 或 格式 2022-10-21T23:59:59
     */
    public static LocalDateTime getDateLastTime(LocalDate day, long num){
        if (null == day) {
            return null;
        }
        return day.plusDays(1L).atStartOfDay().plusSeconds(-1L);
    }
  • 获取某一天,正负n天的0:00
 /**
     * 获取某一天,正负n天的0:00(没有秒)
     * @param day 日期
     * @param num 加减天数 -n,0,n
     * @return 格式 2022-10-21T00:00
     */
    public static LocalDateTime getDateAtStartTime(LocalDate day, long num){
        if (null == day) {
            return null;
        }
        return day.plusDays(num).atStartOfDay();
    }
  • 获取某一天,正负n天的最后一秒(23:59:59)字符串
  /**
     * 获取某一天,正负n天的最后一秒字符(23:59:59)
     * @param day
     * @param num
     * @param patternStr 时间格式 (null默认 yyyy-MM-dd HH:mm:ss)
     * @return
     */
    public static String getDateLastTimeStr(LocalDate day, long num, String patternStr){
        LocalDateTime time = getDateLastTime(day, num);

        if (time == null) {
            return "";
        }
        String patternStr2 = "yyyy-MM-dd HH:mm:ss";
        if (patternStr != null && !patternStr.isEmpty()) {
            patternStr2 = patternStr;
        }
        DateTimeFormatter pattern = DateTimeFormatter.ofPattern(patternStr2);
        return pattern.format(time);
    }
  • 获取某一天,正负n天的00:00:00字符
    /**
     * 获取某一天,正负n天的00:00:00字符
     * @param day
     * @param num
     * @param patternStr 日期格式(null 默认"yyyy-MM-dd HH:mm:ss" )
     * @return ""  或 "yyyy-MM-dd HH:mm:ss" 或 patternStr格式
     */
    public static String getDateAtStartTimeStr(LocalDate day, long num, String patternStr){
        LocalDateTime time = getDateAtStartTime(day, num);
        if (time == null) {
            return "";
        }

        String patternStr2 = "yyyy-MM-dd HH:mm:ss";
        if (patternStr != null && !patternStr.isEmpty()) {
            patternStr2 = patternStr;
        }
        DateTimeFormatter pattern = DateTimeFormatter.ofPattern(patternStr2);
        return pattern.format(time);
    }

计算时间间隔

//计算两个日期的日期间隔-年月日
LocalDate date1 = LocalDate.of(2020, 10, 21);
LocalDate date2 = LocalDate.of(2019, 9, 11);
//内部是用date2-date1,所以得到的结果是负数
Period period = Period.between(date1, date2);
System.out.println(“相差年数 : ” + period.getYears());
System.out.println(“相差月数 : ” + period.getMonths());
System.out.println(“相差日数 : ” + period.getDays());
//另一种计算方式和表现形式
System.out.println(“——————————-“);
long years = period.get(ChronoUnit.YEARS);
long months = period.get(ChronoUnit.MONTHS);
long days = period.get(ChronoUnit.DAYS);
System.out.println(“相差的年月日分别为 : ” + years + “,” + months + “,” + days);

//计算两个日期的日期间隔-年月日
LocalDate date1 = LocalDate.of(2020, 10, 21);
LocalDate date2 = LocalDate.of(2019, 9, 11);
//内部是用date2-date1,所以得到的结果是负数
Period period = Period.between(date1, date2);
System.out.println(“相差年数 : ” + period.getYears());
System.out.println(“相差月数 : ” + period.getMonths());
System.out.println(“相差日数 : ” + period.getDays());
//另一种计算方式和表现形式
System.out.println(“——————————-“);
long years = period.get(ChronoUnit.YEARS);
long months = period.get(ChronoUnit.MONTHS);
long days = period.get(ChronoUnit.DAYS);
System.out.println(“相差的年月日分别为 : ” + years + “,” + months + “,” + days);

获取几年几个月几日几时几分

并没有获得秒差,没有该方法,不过可以通过毫秒换算

//计算两个时间的间隔
System.out.println(“——————————-“);
LocalDateTime date3 = LocalDateTime.now();
LocalDateTime date4 = LocalDateTime.of(2018, 1, 13, 22, 30, 10);
Duration duration = Duration.between(date3, date4);
System.out.println(date3 + ” 与 ” + date4 + ” 间隔 ” + “\n”
+ ” 天 :” + duration.toDays() + “\n”
+ ” 时 :” + duration.toHours() + “\n”
+ ” 分 :” + duration.toMinutes() + “\n”
+ ” 毫秒 :” + duration.toMillis() + “\n”
+ ” 纳秒 :” + duration.toNanos() + “\n”
);

//计算两个时间的间隔
System.out.println(“——————————-“);
LocalDateTime date3 = LocalDateTime.now();
LocalDateTime date4 = LocalDateTime.of(2018, 1, 13, 22, 30, 10);
Duration duration = Duration.between(date3, date4);
System.out.println(date3 + ” 与 ” + date4 + ” 间隔 ” + “\n”
+ ” 天 :” + duration.toDays() + “\n”
+ ” 时 :” + duration.toHours() + “\n”
+ ” 分 :” + duration.toMinutes() + “\n”
+ ” 毫秒 :” + duration.toMillis() + “\n”
+ ” 纳秒 :” + duration.toNanos() + “\n”
);

2个时间比较

isBefore
isAfter
// 今天0:00
LocalDate now = LocalDate.now();
LocalDateTime atStartOfDay = now.atStartOfDay();
// 今天的最后一秒
LocalDateTime lastTime = LocalDate.now().plusDays(1L).atStartOfDay().plusSeconds(-1L);
System.out.println(“LocalDate当前时间小于3天后:”+now.isBefore(now.plusDays(3)));
System.out.println(“LocalDateTime,0点大于今天最后一秒:”+atStartOfDay.isAfter(lastTime));