【发布时间】:2020-06-27 05:05:06
【问题描述】:
例如,现在越南是 2020-03-16 11:23:23.121,但我的程序在美国运行,如何获取 2020-03-16 12:00:00.000 的 Date 实例越南,也就是说,我保持年月日不变,但是将小时设置为12,分钟,秒和纳秒设置为0,LocalDateTime可以发挥作用吗?
【问题讨论】:
-
你能用一些输入输出清晰的例子解释一下吗?
例如,现在越南是 2020-03-16 11:23:23.121,但我的程序在美国运行,如何获取 2020-03-16 12:00:00.000 的 Date 实例越南,也就是说,我保持年月日不变,但是将小时设置为12,分钟,秒和纳秒设置为0,LocalDateTime可以发挥作用吗?
【问题讨论】:
ZonedDateTime在 java-8 中,您可以使用 ZonedDateTime 从任何区域获取日期时间
ZonedDateTime dateTime = ZonedDateTime.now(ZoneId.of("Asia/Ho_Chi_Minh"))
您可以使用with 方法将时间修改为12:00:00。通过调用LocalTime.of 获得的LocalTime 对象传递一天中的时间。在新的LocalTime 对象中,秒和纳秒默认为零,因此无需将这些参数传递给工厂方法。
dateTime.with( LocalTime.of( 12 , 0 ) ) //2020-03-16T12:00+07:00[Asia/Ho_Chi_Minh]
Java util Date 不会存储任何时区信息,它只代表一个特定的时间瞬间(只有 UTC),精度为毫秒。我会建议避免使用旧版util.Date
【讨论】:
util.Date,LocalDateTime 如果他只需要日期和时间从越南@lily
ZonedDateTime zdt = ZonedDateTime.of(2020, 3, 16, 12, 0, 0, 0, ZoneId.of("Asia/Ho_Chi_Minh"));
【讨论】:
0,0,0,就像我在回答中显示的那样
LocalDateTime
LocalDateTime 可以发挥作用吗?
LocalDateTime 不能代表时刻,因为它缺少时区上下文或与 UTC 的偏移量。所以这正是您的问题在此处使用的 错误 类。
要表示一个时刻,时间轴上的一个特定点,请使用:
Instant(始终为 UTC)OffsetDateTime(带有与 UTC 的偏移量,数小时-分钟-秒)ZonedDateTime(带有指定的时区,以Continent/Region命名)查看正确的Answer by Deadpool 以正确使用ZonedDateTime 来解决您的问题。
欲了解更多信息,请参阅What's the difference between Instant and LocalDateTime?
【讨论】: