Java ZonedDateTime的使用与Date的转换

0.引言

众所周知,Java中的Date类型在新版本Java中好多方法是过时的方法,那么常见的替代Date的一个方法就是ZonedDateTime,他是带时区的,如果说只需要简单不带时区的日期类型那么LocalDateTime很好用。

1.使用

当我们使用Date时,常见的就是获取当前时间

Date nowDate = new Date();

那么在使用ZonedDateTime时,与之对应的获取当前时间为

ZonedDateTime zonedDateTime = ZonedDateTime.now(ZoneId.systemDefault());

其中ZoneId.systemDefault()代表获取当前系统的默认时区,因为ZonedDateTime是包含时区信息的。

我们使用Date时,经常进行格式化

SimpleDateFormat simpleDateFormat = new SimpleDateFormat("yyyy-MM-dd HH:mm:ss");
Date nowDate = new Date();
String dateStr = simpleDateFormat.format(nowDate);

那么对应的新代码为

DateTimeFormatter dateTimeFormatter = DateTimeFormatter.ofPattern("yyyy-MM-dd HH:mm:ss");
ZonedDateTime zonedDateTime = ZonedDateTime.now(ZoneId.systemDefault());
String dateStr = dateTimeFormatter.format(zonedDateTime);

基本一致,只是多了个指定时区和类名稍加变化。

那我们如何实现DateZonedDateTime 呢?

其中一种方法如下:

Date nowDate = new Date();
ZonedDateTime zonedDateTime1 = ZonedDateTime.ofInstant(nowDate.toInstant(),ZoneId.systemDefault());

ZonedDateTime转为Date则可以使用如下方法:

ZonedDateTime zonedDateTime = ZonedDateTime.now(ZoneId.systemDefault());
Date date = Date.from(zonedDateTime.toInstant());

使用了ZonedDateTime后会有很多好用的方法

20250903151951349-image

20250903152012811-image

日期加减只需要调用个方法即可完成。

再也不用手动判断啦!

 

用云无忧
© 版权声明
THE END
喜欢就支持一下吧
点赞12 分享
评论 共1条

请登录后发表评论

    • Level0的头像-零一物语Level0徽章-打卡狂魔-零一物语等级-LV6-零一物语作者0