Java案例解析-时间处理
/Java_Guide
Java8的time包是基于Joda-Time进行构建的,强推
一、创建实例
1-1 now 方法根据当前日期或时间创建实例 System . out . println ( "Instant.now(): " + Instant . now ()); // (1)
System . out . println ( "LocalDate.now(): " + LocalDate . now ()); // (2)
System . out . println ( "LocalTime.now(): " + LocalTime . now ()); // (3)
System . out . println ( "LocalDateTime.now(): " + LocalDateTime . now ()); // (4)
System . out . println ( "ZonedDateTime.now(): " + ZonedDateTime . now ()); // (5)
/*
*Instant.now(): 2022-04-22T14:08:25.417575Z
*LocalDate.now(): 2022-04-22
*LocalTime.now(): 22:08:25.506247
*LocalDateTime.now(): 2022-04-22T22:08:25.506403
*ZonedDateTime.now(): 2022-04-22T22:08:25.507579+08:00[Asia/Shanghai]
*/
UTC(祖鲁时间),精确到纳秒
日期的基本格式为 yyyy-MM-dd
时间的基本格式为 hh ss.sss
LocalDateTime 类将两种格式合二为一,中间用大写字母 T 隔开
ZonedDateTime 类用于显示包含时区信息的日期和时间,其后添加了时区偏移量以及一个地区名
1-2 of 用于生成新的值 System . out . println ( "First landing on the Moon:" );
LocalDate moonLandingDate = LocalDate . of ( 1969 , Month . JULY , 20 ); // (1)
LocalTime moonLandingTime = LocalTime . of ( 20 , 18 ); // (2)
System . out . println ( "Date: " + moonLandingDate );
System . out . println ( "Time: " + moonLandingTime );
System . out . println ( "Neil Armstrong steps onto the surface: " );
LocalTime walkTime = LocalTime . of ( 20 , 2 , 56 , 150_000_000 );
LocalDateTime walk = LocalDateTime . of ( moonLandingDate , walkTime ); // (3)
System . out . println ( walk );
/*
*First landing on the Moon:
*Date: 1969-07-20
*Time: 20:18
*Neil Armstrong steps onto the surface:
*1969-07-20T20:02:56.150
*/
LocalDate.of方法接收年、月(枚举或整型)、日
LocalTime.of方法根据可用的小时、分、秒以及纳秒值获取当前日期
LocalDateTime.of方法根据可用的年、月、日、小时、分、秒以及纳秒值获取当前日期和时间
1-3 使用plus with和 minus创建新实例 System . out . println ( "润年二月: " + Month . FEBRUARY . length ( true ));
System . out . println ( "润年八月第一天: " + Month . AUGUST . firstDayOfYear ( true ));
System . out . println ( "Month.of(1): " + Month . of ( 1 ));
System . out . println ( "加2个月: " + Month . JANUARY . plus ( 2 ));
System . out . println ( "减1个月: " + Month . MARCH . minus ( 1 ));
Period period = Period . of ( 1 , 3 , 4 ); // (1)
LocalDateTime start = LocalDateTime . of ( 2020 , Month . FEBRUARY , 2 , 11 , 30 );
LocalDateTime end = start . plus ( period );
System . out . println ( end . format ( DateTimeFormatter . ISO_LOCAL_DATE_TIME ). toString ());
LocalDateTime start = LocalDateTime . of ( 2020 , Month . FEBRUARY , 2 , 11 , 30 );
LocalDateTime end = start . withMinute ( 45 ); // (2)
/*
*润年二月: 29
*润年八月第一天: 214
*Month.of(1): JANUARY
*加2个月: MARCH
*减1个月: FEBRUARY
*2021-05-06T11:30:00
*/
使用Period指定一个时间间隔:一年3个月零4天
with就用来修改对应分钟(withYear、withMonth、withDayOfYear、withDayOfMonth、withHour、withSecond、withNano)
java.time 包中的类是不可变的,如果实例方法(如 plus、minus 或 with)试图修改某个类,将生成一个新的实例
二、添加时区信息
2-1 LocalDateTime dateTime = LocalDateTime . of ( 2017 , Month . JULY , 4 , 13 , 20 , 10 );
ZonedDateTime nyc = dateTime . atZone ( ZoneId . of ( "Asia/Shanghai" ));
System . out . println ( nyc );
ZonedDateTime london = nyc . withZoneSameInstant ( ZoneId . of ( "Europe/London" )); // (1)
System . out . println ( london );
Set < String > regionNames = ZoneId . getAvailableZoneIds (); // (2)
// 2017-07-04T13:20:10+08:00[Asia/Shanghai]
// 2017-07-04T06:20:10+01:00[Europe/London]
withZoneSameInstant可以进行时区切换
查看所有时区
文件处理 Time时间处理
创建日期:
April 22, 2022 22:27:24
最后更新:
March 12, 2023 01:10:39