如何将日期转换为ZonedDateTime?

5
我有各种格式为 2014-01-21 10:28:57.122Zjava.util.Date 对象。我想将它们全部转换为 ZonedDateTime 对象。
根据this Stack Overflow问题和ZonedDateTimeofInstant(),其中一种方法如下:
ZonedDateTime z = ZonedDateTime.ofInstant(dateObject.toInstant(), ZoneId);

问题是,我该如何确定在ZoneId参数中使用什么?我不能使用我的系统时间(ZoneId.systemDefault()),因为我的Date对象都有不同的时区。

1
如果时间以 Z 结尾,那么根据定义它们就是 UTC 时间。您能否编辑并向我们展示您创建/解析这些对象的代码呢? - durron597
1个回答

9

你的java.util.Date对象没有时区信息。日期总是以UTC格式内部存储。

当你将文本字符串解析为一个Date对象时,解析器会应用一个时区,可以是文本中给定的,也可以是解析器的参数或默认值。

当你显示一个Date对象时,格式化程序会按要求在请求的时区生成文本,无论是否显示时区。

因此,在Date对象中没有时区信息时,你必须在转换为ZonedDateTime时指定想要的时区。

最好直接将文本解析为ZonedDateTime,这样它就能记住文本中原始的时区信息。


非常好的解释 @Andreas - Sundararaj Govindasamy

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接