无需任何时区转换即可将时间戳转换为Joda DateTime

时间:2019-03-08 04:13:13

标签: spring datetime jodatime spring-jdbc

我在UTC中存储的Oracle数据库列中有时间戳记值。我想通过spring的jdbcTemplate读取它并将其转换为joda DateTime对象,而不进行任何时区转换,即按原样读取而不转换或丢失时区。 例如如果输入的时间戳为2019-03-08 15:07:37.232,则我想让DateTime对象的值为2019-03-08T15:07:37.232Z 我该如何实现?

请注意此代码-new DateTime(timestamp.getTime(), DateTimeZone.UTC))无济于事,因为它假定输入的时间戳在本地时区并将其重新转换为UTC。对于以上输入为2019-03-08 15:07:37.232,结果为2019-03-08T09:37:37.232Z

谢谢。

2 个答案:

答案 0 :(得分:0)

一种有效的解决方案是更改从数据库检索时间戳列值的方式。下面的代码段用于将时间戳列值转换为joda DateTime而不会丢失/转换时区

new DateTime(resultSet.getTimestamp("CreatedDateTime",
                        Calendar.getInstance(TimeZone.getTimeZone("UTC"))), DateTimeZone.UTC)

希望也能帮助别人。

答案 1 :(得分:-1)

如果您已经有一个DateTime对象,则有方法

public DateTime withZone(DateTimeZone newZone) 

它将返回具有不同时区的datetime副本,并保留毫秒级时间

例如:-dateTime.withZone(DateTimeZone.UTC)