Java8新特性 时间日期API
有不懂的可以去看看jdk8的接口文档
Instant时间戳
//默认使用UTC时区
Instant instant = Instant.now();
System.out.println("当前时区时间戳: " + instant);
OffsetDateTime offsetDateTime = instant.atOffset(ZoneOffset.ofHours(8));
System.out.println("当前8时区时间戳: " + offsetDateTime);
//获取当前秒内的纳秒数
System.out.println("获取当前秒内的纳秒数: "+instant.getNano());
结果
当前时区时间戳: 2023-02-03T06:20:31.750Z
当前北京时区时间戳: 2023-02-03T14:20:31.750+08:00
获取当前秒内的纳秒数: 750000000
基本操作
LocalDateTime localDateTime = LocalDateTime.now();
System.out.println(localDateTime);
System.out.println("获取年: " + localDateTime.getYear());
System.out.println("获取月: " + localDateTime.getMonthValue());
System.out.println("获取天: " + localDateTime.getDayOfMonth());
System.out.println("获取时: " + localDateTime.getHour());
System.out.println("获取分: " + localDateTime.getMinute());
System.out.println("获取秒: " + localDateTime.getSecond());
LocalDateTime localDateTime2 = LocalDateTime.of(2023, 02, 03, 12, 10, 10);
System.out.println("localDateTime2: " + localDateTime2);
// 在当前时间加3年
LocalDateTime localDateTime3 = localDateTime2.plusYears(3);
System.out.println("在当前时间加3年: " + localDateTime3);
// 在当前时间减1个月
LocalDateTime localDateTime4 = localDateTime3.minusMonths(1);
System.out.println("在当前时间减1个月: " + localDateTime4);
结果
2023-02-03T14:20:31.749
获取年: 2023
获取月: 2
获取天: 3
获取时: 14
获取分: 20
获取秒: 31
localDateTime2: 2023-02-03T12:10:10
在当前时间加3年: 2026-02-03T12:10:10
在当前时间减1个月: 2026-01-03T12:10:10
Duration和Period
// 获取Unix元年(1907年1月1日午夜时分)
Instant ins2 = Instant.ofEpochMilli(0);
System.out.println("Unix元年: " + ins2);
Instant instant1 = Instant.now();
System.out.println("********************************");
Thread.sleep(1000);
Instant instant2 = Instant.now();
System.out.println("instant1与iinstant2相差:" + Duration.between(instant1, instant2));
System.out.println("********************************");
LocalDate ld1 = LocalDate.now();
LocalDate ld2 = LocalDate.of(2024, 05, 20);
Period period = Period.between(ld1, ld2);
System.out.println("当前时间与2024-05-20相差年:" + period.getYears());
System.out.println("当前时间与2024-05-20相差月:" + period.getMonths());
System.out.println("当前时间与2024-05-20相差日:" + period.getDays());
结果
Unix元年: 1970-01-01T00:00:00Z
********************************
instant1与iinstant2相差:PT1.007S
********************************
当前时间与2024-05-20相差年:1
当前时间与2024-05-20相差月:3
当前时间与2024-05-20相差日:17
操纵日期
// 获取收货时间
LocalDateTime shanghai=LocalDateTime.now(ZoneId.of("Asia/Shanghai"));
System.out.println(shanghai);
LocalDateTime nowLocalDateTime=LocalDateTime.now();
System.out.println("当前时间:" + nowLocalDateTime);
// 替换日期中的日数
LocalDateTime nowLocalDateTime2=nowLocalDateTime.withDayOfMonth(19);
System.out.println("替换nowLocalDateTime日期中的日数:" + nowLocalDateTime2);
// 在nowLocalDateTime2的第一个星期天
LocalDateTime nowLocalDateTime3=nowLocalDateTime2.with(TemporalAdjusters.next(DayOfWeek.SUNDAY));
System.out.println("在nowLocalDateTime2的第一个星期天:" + nowLocalDateTime3);
//查询下一个工作日
LocalDateTime nextWorkingDay = nowLocalDateTime.with( l -> {
LocalDateTime localDateTime1= (LocalDateTime) l;
DayOfWeek dow = localDateTime1.getDayOfWeek();
if (dow.equals(DayOfWeek.FRIDAY)) {
return localDateTime1.plusDays(3);
} else if (dow.equals(DayOfWeek.SATURDAY)) {
return localDateTime1.plusDays(2);
} else {
return localDateTime1.plusDays(1);
}
}
);
System.out.println("下一个工作日:"+nextWorkingDay);
结果
2023-02-03T14:20:32.769
当前时间:2023-02-03T14:20:32.769
替换nowLocalDateTime日期中的日数:2023-02-19T14:20:32.769
在nowLocalDateTime2的第一个星期天:2023-02-26T14:20:32.769
下一个工作日:2023-02-06T14:20:32.769