Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/java/352.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
卡桑德拉Java日期问题_Java_Cassandra_Cassandra 3.0 - Fatal编程技术网

卡桑德拉Java日期问题

卡桑德拉Java日期问题,java,cassandra,cassandra-3.0,Java,Cassandra,Cassandra 3.0,我有一个日期作为字符串,现在我想在Cassandra db的时间戳列中保留相同的datetime。在cqlsh查询中,时间戳显示为与实际时间戳不同。 我正在使用简单的日期格式化程序SimpleDataFormat(“E-MMM-dd-HH:mm:ss-yyyy”)对其进行解析并存储 示例:字符串日期:2020年1月15日星期三14:29:00, 单位:db:2020-01-1605:50:40.000000+0000 有时,我也会遇到这样的错误:DateOverFlowWarning:有些时间戳

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

示例:字符串日期:2020年1月15日星期三14:29:00, 单位:db:2020-01-1605:50:40.000000+0000


有时,我也会遇到这样的错误:DateOverFlowWarning:有些时间戳比Python datetime所能表示的要大。时间戳从历元开始以毫秒为单位显示。

注意:我不使用Cassandra。但这或许会有所帮助

数据类型 正如您所了解的,当数据库支持适当的日期时间数据类型时,不要将日期时间值存储为文本

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

时刻与日期以及一天中的时间 另一个问题:您正试图使用type跟踪时刻,但存储的字符串(如
Wed Jan 15 14:29:00 2020
)不是时刻。如果没有时区或UTC偏移的背景,我们无法知道几乎下午2:30的时间是日本东京的下午2:30还是美国俄亥俄州托莱多的下午2:30,两个截然不同的时刻相隔几个小时

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

OffsetDateTime odt = ldt.atOffset( ZoneOffset.UTC ) ;
看这个

数据库 如果您有一个支持JDBC 4.2及更高版本的Cassandra驱动程序,您应该能够直接提交这个java.time对象

myPreparedStatement.setObject( … , odt ) ;
如果不是,则可以获得自1970 UTC第一时刻的历元引用以来的毫秒计数

long milliseconds = odt.toInstant().toEpochMilli() ;
毫秒:157909854000

往另一个方向走

Instant instant = Instant.ofEpochMilli( milliseconds ) ;
获取此错误:DateOverFlowWarning:某些时间戳大于Python datetime可以表示的时间戳

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



关于java.time 该框架内置于Java8及更高版本中。这些类取代了麻烦的旧日期时间类,例如,&

要了解更多信息,请参阅。并搜索堆栈溢出以获得许多示例和解释。规格是

该项目现已启动,建议迁移到类

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

从哪里获得java.time类

  • 、和更高版本-标准Java API的一部分,带有捆绑实现。
    • Java9添加了一些次要功能和修复
    • 大多数java.time功能都在中向后移植到Java6和Java7
    • 更高版本的Android捆绑包实现了java.time类
    • 对于早期的Android(