【问题标题】:Convert TimeStamp To Joda DateTime Without Any Timezone Conversion将 TimeStamp 转换为 Joda DateTime 而不进行任何时区转换
【发布时间】:2019-03-12 18:17:41
【问题描述】:

我在以 UTC 存储的 Oracle 数据库列中有时间戳值。我想通过 spring 的 jdbcTemplate 读取它并将其转换为 joda DateTime 对象而不进行任何时区转换,即按原样读取它而不转换或丢失时区。 例如如果输入时间戳为2019-03-08 15:07:37.232,我希望拥有值为2019-03-08T15:07:37.232Z 的DateTime 对象 我怎样才能做到这一点?

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

谢谢。

【问题讨论】:

  • 据我了解,如果你知道数据库时间戳是UTC,但Oracle不知道(它不是timestamp with time zone),你的2019-03-08 15:07:37.232时间戳将是在您的时区中错误地检索为该日期和时间,因此您需要将其转换回 UTC。不过,Oracle 和 Spring 的 jdbcTemplate 并不是我的家乡。

标签: spring datetime jodatime spring-jdbc


【解决方案1】:

一个可行的解决方案是更改从数据库中检索时间戳列值的方式。下面的 sn-p 用于将时间戳列值转换为 joda DateTime 而不会丢失/转换时区

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

希望对其他人也有帮助。

【讨论】:

    【解决方案2】:

    如果你已经有一个 DateTime 对象,那就有方法

    public DateTime withZone(DateTimeZone newZone) 
    

    这将返回具有不同时区的日期时间副本,保留毫秒瞬间

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

    【讨论】:

    • 我没有 DateTime 对象。我有一个来自数据库的 Timestamp 对象。
    猜你喜欢
    • 2011-06-07
    • 2020-12-15
    • 2022-01-02
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2013-08-08
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多