【发布时间】:2023-03-15 05:00:01
【问题描述】:
在Java8中使用以下代码-
newTable.LogDate = Date.from(ZonedDateTime.of(year, month, day, 0, 0, 0, 0, ZoneId.of("GMT")).toInstant());
LogDate 最终会针对我(和我的用户)的设备进行调整。
在上述情况下,例如,如果我发送 1934, 1, 1(1934 年 1 月 1 日),则 LogDate 为 1933 年 12 月 31 日晚上 7 点。 (对于我的设备的美国东部时区。)
有没有办法让 Date 对象不采用设备的时区并进行任何转换?
编辑添加:如果我更改 ZoneId.of("GMT") 并将 JUST IT 更改为 ZoneId.systemDefault(),则最终结果符合预期且“正确”。 (即 1934 年 1 月 1 日停留。)
【问题讨论】:
-
您如何以及在哪里看到您的时区被考虑在内? (问是因为不是。)
-
@OleV.V.我认为 Date 对象根本没有任何“时区”信息 - 但是,当我在调试期间查看 Android Studio 时,Date 对象的字段部分包含区域偏移时间。 (目前我不知道该字段的名称 - 明天我回到办公室后需要将其拉出来。)
-
我说得对,
Date的实现通常存储一个时区。我一直不明白为什么,这很令人困惑。一个猜测是它是一个优化的东西。我从未见过它与 JVM 默认时区不同的情况。
标签: android date java-time java.util.date datetime-conversion