我有各种java.util.Date
个对象,其格式为2014-01-21 10:28:57.122Z
。我想将它们全部转换为ZonedDateTime
个对象。
根据this SO问题和ZonedDateTime
's ofInstant()
,有一种方式是这样的:
ZonedDateTime z = ZonedDateTime.ofInstant(dateObject.toInstant(), ZoneId);
问题是,如何确定ZoneId
参数的用途?我无法使用系统时间(ZoneId.systemDefault()
),因为我的Date
个对象都有不同的时区。
答案 0 :(得分:5)
您的java.util.Date
对象不有时区。日期始终以UTC格式存储在内部。
当您将文本字符串解析为Date
对象时,解析器会将时区(如文本中给出的)作为参数应用于解析器,或者默认情况下。
当您显示Date
对象时,格式化程序将在请求的时区内生成所请求的文本,无论时区是否显示。
因此,如果Date
对象中没有时区信息,你必须指定转换为ZonedDateTime
时所需的时区。
更好的是,将文本直接解析为ZonedDateTime,因此它可以记住文本中的原始时区。