1、LocalDate 、LocalTime 、LocalDateTime:时间日期类
@Test
public void test1(){
LocalDateTime ldt = LocalDateTime.now();
System.out.println(ldt);// 输出:2019-09-26T10:58:49.030
LocalDateTime ldt2 = LocalDateTime.of(2019, 9, 26, 10, 59);
System.out.println(ldt2);// 输出:2019-09-26T10:59
// 加2年
LocalDateTime ldt3 = ldt.plusYears(2);
System.out.println(ldt3);// 输出:2021-09-26T11:01:03.355
// 减2月
LocalDateTime ldt4 = ldt.minusMonths(2);
System.out.println(ldt4);// 输出:2019-07-26T11:02:07.117
// 输出年月日
System.out.println(ldt.getYear() + "-" + ldt.getMonthValue() + "-" + ldt.getDayOfMonth());
// 输出:2019-9-26
}
2、Instant: 时间戳(时标是从标准的Java时代1970-01-01T00:00:00Z测量的)
@Test
public void test2(){
Instant instant = Instant.now();// 获取UTC时区
System.out.println(instant);//输出:2019-09-27T01:26:37.237Z
OffsetDateTime odt = instant.atOffset(ZoneOffset.ofHours(8));
System.out.println(odt);//输出:2019-09-27T09:27:05.845+08:00
// 获取毫秒
System.out.println(instant.toEpochMilli());//输出:1569547680077
// 增加秒数
instant = Instant.ofEpochSecond(60);
System.out.println(instant);//输出:1970-01-01T00:01:00Z
}
3、Duration:计算2个时间之间的间隔
@Test
public void test3(){
Instant instant = Instant.now();
try {
Thread.sleep(1000);
} catch (InterruptedException e) {
e.printStackTrace();
}
Instant instant2 = Instant.now();
Duration duration = Duration.between(instant, instant2);
System.out.println(duration.toMillis());//输出:1000
LocalTime lt = LocalTime.now();
try {
Thread.sleep(1000);
} catch (InterruptedException e) {
e.printStackTrace();
}
LocalTime lt1 = LocalTime.now();
System.out.println(Duration.between(lt, lt1).toMillis());//输出:1000
}
4、Period:计算2个日期之间的间隔
@Test
public void test4(){
LocalDate ld = LocalDate.of(2015, 8, 20);
LocalDate ld2 = LocalDate.now();
Period period = Period.between(ld, ld2);
System.out.println(period.getYears());//输出:4
System.out.println(period.getMonths());//输出:1
System.out.println(period.getDays());//输出:7
}
5、TemporalAdjuster:时间校正器
@Test
public void test5(){
LocalDateTime ldt = LocalDateTime.now();
System.out.println(ldt);//输出:2019-09-27T09:37:35.724
LocalDateTime ldt2 = ldt.withDayOfMonth(10);
System.out.println(ldt2);//输出:2019-09-10T09:38:14.318
// 下个周日
LocalDateTime ldt3 = ldt.with(TemporalAdjusters.next(DayOfWeek.SUNDAY));
System.out.println(ldt3);//输出:2019-09-29T09:39:40.498
LocalDateTime ldt4 = ldt.with((l) -> {
LocalDateTime ldt5 = (LocalDateTime) l;
DayOfWeek dayOfWeek = ldt5.getDayOfWeek();
if(dayOfWeek.equals(DayOfWeek.FRIDAY)){
return ldt5.plusDays(3);
}else if(dayOfWeek.equals(DayOfWeek.SATURDAY)){
return ldt5.plusDays(2);
}else{
return ldt5.plusDays(1);
}
});
System.out.println(ldt4);//输出:2019-09-30T10:12:14.922
}
6、DateTimerForMatter:格式化时间/日期
@Test
public void test6(){
DateTimeFormatter dtf = DateTimeFormatter.ISO_DATE_TIME;
LocalDateTime ldt = LocalDateTime.now();
String datestr = ldt.format(dtf);
System.out.println(datestr);//输出:2019-09-27T09:46:20.233
// 自定义格式化
DateTimeFormatter dtf2 = DateTimeFormatter.ofPattern("yyyy-MM-dd HH:mm:ss");
String datestr1 = dtf2.format(ldt);
System.out.println(datestr1);//输出:2019-09-27 09:47:27
// 字符串转时间
LocalDateTime ldt2 = LocalDateTime.parse(datestr1, dtf2);
System.out.println(ldt2);// 2019-09-27T09:49:20
}
7、时区的处理:ZonedDate、ZonedTime、ZonedDateTime
@Test
public void test8(){
// 指定一个时区获取当前时间
LocalDateTime ldt = LocalDateTime.now(ZoneId.of("Europe/Monaco"));
System.out.println(ldt);//输出:2019-09-27T03:53:12.003
LocalDateTime ldt2 = LocalDateTime.now(ZoneId.of("Asia/Shanghai"));
ZonedDateTime zdt = ldt2.atZone(ZoneId.of("Asia/Shanghai"));
System.out.println(zdt);//输出:2019-09-27T09:56:08.520+08:00[Asia/Shanghai]
}