java - 将任何时区中的 LocalDateTime 转换为 Java 中的任何时区
问题描述
- 假设我
LocalDateTime
在 IST 中,即 (2020-08-14T15:41) - 需要将此 IST 转换
LocalDateTime
为任何时区让我们说 IST 到 UTC
所需输出:2020-08-14T10:11 //表示 2020 年 8 月 14 日星期五上午 10:11
如果LocalDateTime
来自任何区域,则将相应地获得 UTC 时间相对于任何时区时间的 UTC 时间。
得到了将 LocalDateTime 从任何时区转换为任何时区的通用解决方案:
LocalDateTime localDateTimeOfFromTimeZone = LocalDateTime.now();//it's takes your default application LocalDateTime
System.out.println("From LocalDateTime : "+localDateTimeOfFromTimeZone);
ZonedDateTime fromTimeZonedDateTime = localDateTimeOfFromTimeZone.atZone(fromTimeZoneId);
LocalDateTime localDateTimeOfToTimeZone = LocalDateTime.from(fromTimeZonedDateTime.withZoneSameInstant(toTimeZoneId));
System.out.println("Converted To LocalDateTime :"+localDateTimeOfToTimeZone);
或者
LocalDateTime newDateTime = oldDateTime.atZone(oldZone).withZoneSameInstant(newZone).toLocalDateTime();
解决方案
我建议不要LocalDateTime
在时区的日期和时间使用 for。ZonedDateTime
是那个类。ALocalDateTime
正好是没有时区的日期和时间。
ZoneId fromTimeZoneId = ZoneId.of("Asia/Kolkata");
ZoneId toTimeZoneId = ZoneId.of("Etc/UTC");
ZonedDateTime dateTimeOfFromTimeZone = ZonedDateTime.now(fromTimeZoneId);
System.out.println("From ZonedDateTime: " + dateTimeOfFromTimeZone);
ZonedDateTime dateTimeOfToTimeZone
= dateTimeOfFromTimeZone.withZoneSameInstant(toTimeZoneId);
System.out.println("Converted To ZonedDateTime: " + dateTimeOfToTimeZone);
刚才运行代码时的输出:
From ZonedDateTime: 2020-08-15T00:13:19.519646+05:30[Asia/Kolkata] Converted To ZonedDateTime: 2020-08-14T18:43:19.519646Z[Etc/UTC]
当使用ZonedDateTime
而不是LocalDateTime
,Java 会跟踪每个日期和时间对象的时区,这使得在转换中出错变得相当困难。一个难以高估的优势。
推荐阅读
- javascript - 在 Dynamics 365 CRM 上使用 Xrm 对象将表单设置为只读
- abap - 如何比较内部表中同一列中的两个字段?ABAP
- r - 仅对 xts 对象中的一行中的负值求和
- java - 在相同环境的不同计算机上,按钮底部消失
- javascript - 是否可以动态导入节点模块?
- ruby-on-rails - Kubernetes 尝试在同一个 pod 上启动 Rails 两次
- c# - CheckboxList on deselect 从项目符号列表中删除项目
- powershell - PowerShell Core 添加内容字节失败
- php - 关于构建基于 php 的文件管理器的建议
- javascript - 如何在不包含父目录的情况下创建 tar 存档