【问题标题】:Cassandra Java date issueCassandra Java 日期问题
【发布时间】:2020-05-02 11:50:53
【问题描述】:

我有一个日期作为字符串,现在我想在 Cassandra db 的时间戳列中保留相同的日期时间。在 cqlsh 查询中,时间戳显示为与实际不同。 我正在使用简单的日期格式化程序 SimpleDateFormat("E MMM dd HH:mm:ss yyyy") 解析它并存储。

例如:字符串日期:2020 年 1 月 15 日星期三 14:29:00, 在数据库中:2020-01-16 05:50:40.000000+0000

有时,我收到此错误:DateOverFlowWarning:某些时间戳大于 Python 日期时间可以表示的。时间戳从纪元开始以毫秒为单位显示。

【问题讨论】:

    标签: java cassandra cassandra-3.0


    【解决方案1】:

    警告:我不使用 Cassandra。但也许这会有所帮助。

    数据类型

    您似乎已经了解到,当您的数据库支持适当的日期时间数据类型时,不要将日期时间值存储为文本。

    文本格式

    而且,仅供参考,您表示日期时间值的格式很糟糕。将日期时间值序列化为文本时,请使用标准的ISO 8601 格式。

    时刻与日期与时间

    另一个问题:您正在尝试使用 timestamp in Cassandra 类型来跟踪时刻,但您存储的字符串(例如 Wed Jan 15 14:29:00 2020)不是时刻。如果没有时区或从 UTC 偏移的上下文,我们无法知道大约下午 2:30 的时间是日本东京的下午 2:30 还是美国俄亥俄州托莱多的下午 2:30,两个非常不同的时刻几个小时分开。

    如果您知道该日期和时间的预期时区,请应用ZoneId 以获取ZonedDateTime。我会假设 UTC(零时分秒的偏移量)是有意的。

    OffsetDateTime odt = ldt.atOffset( ZoneOffset.UTC ) ;
    

    看到这个code run live at IdeOne.com

    数据库

    如果您有支持 JDBC 4.2 及更高版本的 Cassandra 驱动程序,您应该可以直接提交此 java.time 对象。

    myPreparedStatement.setObject( … , odt ) ;
    

    如果没有,您可以获得自 1970 UTC 第一时刻的纪元参考以来的毫秒数。

    long milliseconds = odt.toInstant().toEpochMilli() ;
    

    毫秒:1579098540000

    往另一个方向发展。

    Instant instant = Instant.ofEpochMilli( milliseconds ) ;
    

    收到此错误:DateOverFlowWarning:某些时间戳大于 Python 日期时间可以表示的时间

    我只能猜测。在你的工具链中的某个地方是一个 Python 库。我想该库仅限于使用 32 位整数。但是您需要一个 64 位整数来表示自 1970-01-01T00:00Z 以来 Cassandra timestamp 值的毫秒数。



    关于java.time

    java.time 框架内置于 Java 8 及更高版本中。这些类取代了麻烦的旧 legacy 日期时间类,例如 java.util.DateCalendarSimpleDateFormat

    要了解更多信息,请参阅Oracle Tutorial。并在 Stack Overflow 上搜索许多示例和解释。规格为JSR 310

    Joda-Time 项目现在位于maintenance mode,建议迁移到java.time 类。

    您可以直接与您的数据库交换 java.time 对象。使用符合JDBC 4.2 或更高版本的JDBC driver。不需要字符串,不需要java.sql.* 类。

    从哪里获得 java.time 类?

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 2018-08-24
      • 2014-11-28
      • 2010-10-18
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2015-05-18
      相关资源
      最近更新 更多