即使在使用Java 15年的经验下,处理日期和时间的问题仍然会让人感到困扰......
这里是情况:我从某个外部系统得到一个时间戳,它以
如何确保无论执行代码的机器的设置如何,时间戳都能正确存储在实体中(以便与其他UTC时间戳进行验证),并在以后的报告中使用它们?
以下是代码,在我的本地计算机上正常工作:
这里是情况:我从某个外部系统得到一个时间戳,它以
String
的形式显示。时间戳的语义是它表示一个UTC日期。必须将该时间戳置入实体,然后置入PostgreSQL数据库中的TIMESTAMP
字段中。此外,我需要将相同的时间戳作为本地时间(在我的情况下为CEST)置于实体中,然后置于带有时区的TIMESTAMP WITH TIME ZONE
字段的数据库中。如何确保无论执行代码的机器的设置如何,时间戳都能正确存储在实体中(以便与其他UTC时间戳进行验证),并在以后的报告中使用它们?
以下是代码,在我的本地计算机上正常工作:
SimpleDateFormat sdfUTC = new SimpleDateFormat("yyyy-MM-dd'T'HH:mm:ss.SSS");
sdfUTC.setTimeZone(TimeZone.getTimeZone("UTC"));
Date utcTimestamp = sdfUTC.parse(utcTimestampString);
// getMachinesTimezone is some internal util method giving the TimeZone object of the machines Location
Calendar localTimestamp = new GregorianCalendar(getMachinesTimezone());
localTimestamp.setTimeInMillis(utcTimestamp.getTime());
但是在服务器上执行相同的代码时,结果却不同,因此我认为这不是处理它的正确方法。 有什么建议吗?
PS:我在搜索这个论坛时读到了关于Joda Time的信息,但在给定的项目中,由于我只更改现有模块,因此我无法引入新库,所以我必须使用标准的JDK1.6。