
本文介绍了在Java中处理`ZonedDateTime`时,如何去除输出结果中的时区信息。核心在于理解`ZonedDateTime`本身不包含格式信息,格式化是输出时的行为。文章提供了使用`Instant`替代`ZonedDateTime`的建议,以及强调了在系统边界处进行格式转换的重要性,避免在对象内部携带格式信息。
在使用Java处理日期和时间时,ZonedDateTime是一个常用的类,它表示带时区的日期和时间。然而,在某些情况下,我们可能需要去除ZonedDateTime输出结果中的时区信息,只保留日期和时间部分,例如2022-10-28T12:59:34.939Z,而不是2022-10-28T12:59:34.939Z[UTC]。
理解ZonedDateTime和格式化
关键在于理解ZonedDateTime对象本身并不包含格式信息。它只是一个日期和时间值的表示,以及关联的时区信息。格式化是将ZonedDateTime转换为字符串表示形式的操作,并且格式是在转换过程中应用的。因此,不能直接修改ZonedDateTime对象来改变其默认的输出格式。
立即学习“Java免费学习笔记(深入)”;
解决方案:使用Instant
如果只需要表示时间轴上的一个点,而不需要关联特定的时区,那么可以使用Instant类。Instant表示时间轴上的一个瞬时点,它默认的toString()方法输出的格式是YYYY-MM-DDTHH:MM:SS.sssZ,这正是我们想要的格式。
Long lEpochMilliSeconds = 1668415926445L;Instant instant = Instant.ofEpochMilli(lEpochMilliSeconds);System.out.println(instant); // 输出:2022-10-28T12:59:34.939Z
示例代码
Topaz Video AI
一款工业级别的视频增强软件
388 查看详情
下面的代码展示了如何将毫秒值转换为Instant对象,并打印出符合要求的格式:
import java.time.Instant;public class DateTimeExample { public static void main(String[] args) { Long lEpochMilliSeconds = 1668415926445L; Instant instant = Instant.ofEpochMilli(lEpochMilliSeconds); System.out.println(instant); }}
系统边界处的格式转换
更通用的原则是,应该尽可能长时间地使用语义上最合适的类型(例如ZonedDateTime或Instant)来表示时间值。只有在需要将其转换为字符串表示形式时,才进行格式化。这种格式化应该发生在系统边界处,例如在将数据发送到外部系统或用户界面时。
注意事项
不要试图在ZonedDateTime对象内部存储格式信息。这是不符合面向对象设计原则的。在需要特定格式时,始终在输出时进行格式化,而不是修改对象本身。如果只需要表示时间轴上的一个点,而不是带时区的日期和时间,请使用Instant类。
总结
去除ZonedDateTime输出中的时区信息,关键在于理解格式化是输出时的行为,而不是ZonedDateTime对象本身的属性。可以使用Instant类来表示不带时区信息的瞬时点,或者在系统边界处进行格式化,以获得所需的字符串表示形式。 遵循这些原则可以编写出更健壮、更易于维护的代码。
以上就是去除ZonedDateTime中的时区信息:Java 教程的详细内容,更多请关注创想鸟其它相关文章!
版权声明:本文内容由互联网用户自发贡献,该文观点仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。
如发现本站有涉嫌抄袭侵权/违法违规的内容, 请发送邮件至 chuangxiangniao@163.com 举报,一经查实,本站将立刻删除。
发布者:程序猿,转转请注明出处:https://www.chuangxiangniao.com/p/764301.html
微信扫一扫
支付宝扫一扫