0


java时间

jdk8以前

Date 保存了时间戳,可以确定一个时刻,无时区信息
Calendar 保存了时间戳和时区,可以确定一个时刻,另外有一些方便的操作
TimeZone 时区
SimpleDateFormat 格式化/解析Date(字符串带时区才能确定一个时刻,才是有意义的;不带时区解析出来的Date,其实是使用了默认时区)

jkd8新增

Instant 时间戳,时刻
LocalDateTime 不带时区,无法确定一个时刻
ZonedDateTime 带时区和时间戳,可以确定一个时刻
ZoneId 时区
DateTimeFormatter 格式化/解析LocalDateTime、ZonedDateTime

相互转换

Date对应Instant

Instant ins1 =newDate().toInstant();Date date =newDate(Instant.now().toEpochMilli())

Calendar 对应ZonedDateTime

// Calendar -> Instant -> ZonedDateTime:Calendar calendar =Calendar.getInstance();Instant ins2 = calendar.toInstant();ZonedDateTime zdt = ins2.atZone(calendar.getTimeZone().toZoneId());// ZonedDateTime -> Instant -> Calendar ZonedDateTime zdt =ZonedDateTime.now();Calendar calendar =Calendar.getInstance();
calendar.clear();
calendar.setTimeZone(TimeZone.getTimeZone(zdt.getZone().getId()));
calendar.setTimeInMillis(zdt.toInstant().toEpochMilli());

LocalDateTime转ZonedDateTime,需要带上时区(注意有夏令时的影响,会自动调整结果)

// 进入夏令时,凌晨两点往后拨一小时,因此2点31是不存在的,自动往后加一小时变成"2023-03-12T03:31-04:00[America/New_York]"LocalDateTime localDateTime1 =LocalDateTime.of(2023,3,12,2,31,00);ZonedDateTime zonedDateTime1 =ZonedDateTime.of(localDateTime1,ZoneId.of("America/New_York"));// 正常的处于夏令时的某一天"2023-03-12T04:31-04:00[America/New_York]"LocalDateTime localDateTime2 =LocalDateTime.of(2023,3,12,4,31,00);ZonedDateTime zonedDateTime2 =ZonedDateTime.of(localDateTime2,ZoneId.of("America/New_York"));// 正常的处于冬令时的某一天"2022-12-12T04:31-05:00[America/New_York]"LocalDateTime localDateTime3 =LocalDateTime.of(2022,12,12,4,31,00);ZonedDateTime zonedDateTime3 =ZonedDateTime.of(localDateTime2,ZoneId.of("America/New_York"));
标签: java 开发语言

本文转载自: https://blog.csdn.net/biglamp/article/details/132549754
版权归原作者 biglamp 所有, 如有侵权,请联系我们删除。

“java时间”的评论:

还没有评论