Java 如何将日期转换为ZoneDateTime?

Java 如何将日期转换为ZoneDateTime?,java,Java,我有各种java.util.Date对象,其值的格式如下:2014-01-21 10:28:57.122Z。我想将它们全部转换为zoneDateTime对象 根据SO问题,一种方法是这样的: ZonedDateTime z = ZonedDateTime.ofInstant(dateObject.toInstant(), ZoneId); 问题是,我如何知道如何使用ZoneId参数?我无法使用我的系统时间(ZoneId.systemDefault()),因为我的Date对象都有不同的时区。您的

我有各种
java.util.Date
对象,其值的格式如下:
2014-01-21 10:28:57.122Z
。我想将它们全部转换为
zoneDateTime
对象

根据SO问题,一种方法是这样的:

ZonedDateTime z = ZonedDateTime.ofInstant(dateObject.toInstant(), ZoneId);

问题是,我如何知道如何使用
ZoneId
参数?我无法使用我的系统时间(
ZoneId.systemDefault()
),因为我的
Date
对象都有不同的时区。

您的
java.util.Date
对象没有时区。日期始终存储在UTC内部

当您将文本字符串解析为
Date
对象时,解析器会将一个时区(如文本中给定的)作为参数应用于解析器,或者默认情况下应用于解析器

当您显示
日期
对象时,无论是否显示时区,格式化程序都会根据请求在请求的时区中生成文本

因此,如果
Date
对象中没有时区信息,在转换为
ZonedDateTime
时,必须指定所需的时区


更好的方法是,将文本直接解析为ZonedDateTime,这样它就可以从文本中记住原始时区。

如果它们以
Z
结尾,则定义为UTC。你能告诉我们你在哪里为这些对象创建/解析代码吗?非常好的解释@Andreas