技术文摘
LocalDateTime、OffsetDateTime、ZonedDateTime 互转详解,此文让你一次搞懂
在 Java 8 中,LocalDateTime、OffsetDateTime和ZonedDateTime是处理日期和时间的重要类,它们在不同的场景中发挥着关键作用,并且相互之间的转换也需要我们深入理解。
LocalDateTime 表示的是不带时区的日期和时间,它包含了年、月、日、时、分、秒等信息。例如,创建一个 LocalDateTime 对象可以这样做:LocalDateTime.now() 。
OffsetDateTime 则是包含了与 UTC 的偏移量的日期时间。通过指定偏移量,我们可以明确这个时间相对于 UTC 的偏差。
ZonedDateTime 是与特定时区相关联的日期时间。它能够准确地反映出在某个特定时区中的时间。
那么,它们之间如何进行转换呢?
从 LocalDateTime 转换到 OffsetDateTime ,可以通过结合一个偏移量来实现。例如:
ZoneOffset offset = ZoneOffset.ofHours(8);
OffsetDateTime offsetDateTime = LocalDateTime.now().atOffset(offset);
将 LocalDateTime 转换为 ZonedDateTime ,则需要指定一个时区:
ZoneId zoneId = ZoneId.of("Asia/Shanghai");
ZonedDateTime zonedDateTime = LocalDateTime.now().atZone(zoneId);
反过来,从 OffsetDateTime 转换为 LocalDateTime ,可以使用 toLocalDateTime 方法:
OffsetDateTime offsetDt = OffsetDateTime.now();
LocalDateTime localDt = offsetDt.toLocalDateTime();
从 ZonedDateTime 转换为 LocalDateTime ,通过 toLocalDateTime 方法即可:
ZonedDateTime zonedDt = ZonedDateTime.now(ZoneId.of("Europe/London"));
LocalDateTime localDt = zonedDt.toLocalDateTime();
在实际开发中,根据具体的业务需求,合理选择和转换这几种日期时间类型,能够确保我们对时间的处理准确无误。
无论是处理本地时间、带有偏移量的时间,还是特定时区的时间,理解并熟练掌握 LocalDateTime、OffsetDateTime 和 ZonedDateTime 之间的相互转换,对于开发高质量的日期时间处理代码至关重要。只有这样,我们才能在面对各种复杂的时间场景时游刃有余,确保系统的稳定性和可靠性。
TAGS: LocalDateTime 转换 OffsetDateTime 转换 ZonedDateTime 转换 时间格式互转
- 致有意于字节从事 Go 开发的你
- 前端:基于 Node.JS 从零构建线上自动化打包工作流的方法
- Redis 的 16 个常见应用场景
- Java8 的 StringJoiner 取代 StringBuilder
- DistributedMail 基于跨设备迁移和分布式文件能力的解析
- 10 秒!GitHub 工程团队迁至 Codespaces 实现开发环境“即开即用”
- 达摩院提出目标重识别新范式并向全球开发者开源
- 为何应选 TypeScript 而非 JavaScript
- 微服务架构中的关键名词须知
- 从 OKHttp 的拦截器探究 Android 设计模式中的责任链模式
- 谈谈 ReentrantLock 里的四个坑
- Python 基础条件语句全解析
- 7 月 Github 上 Java 开源项目排名
- 5 张图助你全面弄懂 G1 垃圾收集器
- Angular、React 与 Vue:2021 年框架的抉择