我有一个应用程序,其中我将时区设置为 UTC,如下所示:
// set default time zone to UTC
TimeZone.setDefault(TimeZone.getTimeZone(ZoneOffset.UTC));
这适用于我们以 UTC 格式存储在数据库中的所有日期字段。但是一个日期已经在 UTC 中出现,因此上述时区将再次将其设置为 UTC。
如何避免在 UTC 中再次设置它?
一些代码-
public static void main(String[] args) throws DatatypeConfigurationException {
DatatypeFactory datatypeFactory = DatatypeFactory.
newInstance();
// set default time zone to UTC
TimeZone.setDefault(TimeZone.getTimeZone(ZoneOffset.UTC));
// coming from external program in UTC but assigned it here for reference
long someTimeToBeInUTC = 1528371000000L;
GregorianCalendar start = new GregorianCalendar();
start.setTimeInMillis(someTimeToBeInUTC);
XMLGregorianCalendar startXmlCalendar =
datatypeFactory.newXMLGregorianCalendar(start);
System.out.println(startXmlCalendar.
toGregorianCalendar().getTime());
}
想像我有一个时间瞬间someTimeToBeInUTC
,而与时区无关,然后因为TimeZone.setDefault(TimeZone.getTimeZone(ZoneOffset.UTC))
它在 UTC 中设置它的行。
然后在休眠中,我在存储此值的表的 hbm.xml 中有属性-
<property name="startTime" type="timestamp">
<column name="start_time" length="29" />
</property>
startTime 的类型是 postgres 中没有时区的时间戳。因此,当我们保存时,它会再次将其转换为 UTC。