首页
学习
活动
专区
工具
TVP
发布
社区首页 >问答首页 >如何将java.time.Duration映射到类型为time的Cassandra DB列

如何将java.time.Duration映射到类型为time的Cassandra DB列
EN

Stack Overflow用户
提问于 2018-06-04 22:57:40
回答 1查看 508关注 0票数 0

目标:

将JDK8+中的java.time.Duration列映射到类型为time的Cassandra DB列。

情况:

我找不到任何能够做到这一点的标准映射或任何编解码器(即使在具有额外编解码器的maven依赖中)。这是一个带有Cassandra DB的datastax驱动程序的java 8 maven项目。

问题:

有没有人知道这个或任何编解码器的可行解决方案?如果不是,这是通过java.sql.time解决问题的最好方法吗?或者甚至是可能的?

在这种情况下,我忘记了一些主要的细节,请在下面评论。

EN

回答 1

Stack Overflow用户

回答已采纳

发布于 2018-06-04 23:29:50

tl;dr

使用Cassandra类型的duration而不是time

使用java.time.Duration类传递或解析标准ISO8601字符串。

代码语言:javascript
复制
Duration.parse( "PT1H30M" )  // Parse ISO 8601 string into a `Duration` object.
        .toString()          // Generate a ISO 8601 string from the `Duration` object.

Duration不是一个时间

java.time.Duration类表示未附加到时间线的时间跨度。它不表示一天中的某个时间。

Cassandra time类型定义为:

值被编码为64位有符号整数,表示自午夜以来的纳秒数。值可以表示为字符串,例如13:30:54.234。

因此,您不应该使用Cassandra time类型存储Duration值。

你还有其他选择。

一种选择是存储标准的ISO 8601 textual representation of a durationPnYnMnDTnHnMnS。例如:一个半小时是PT1H30M。这个选项更真实,但是不能在Cassandra中对值进行比较或排序,因为它们只是文本,没有按时间顺序的字母顺序。另外,请参阅下面的“Cassandra持续时间”部分。

另一种选择是提取Duration内部使用的两个数字

  • 64位整数,表示整秒的计数。
  • 表示32位整数,表示小数位秒中的纳秒计数。

如果您坚持使用这些数字,您可以使用这些数字生成一个值,并将其存储为Cassandra time,但这样做违反了语义。

代码语言:javascript
复制
long fakeNanosSinceMidnight = TimeUnit.SECONDS.toNanos( duration.getSeconds ) + duration.getNano() ;  // NOT recommended, but if you insist on abusing Cassandra semantics, here you go. 

卡桑德拉Duration

Cassandra documentation says是内置的duration类型。我不是Cassandra的用户,所以我不能保证它。

文档声明它接受标准的ISO 8601持续时间字符串作为输入。Java中的Duration::toString方法生成这样的字符串,而Duration::parse则解析它们。

代码语言:javascript
复制
String inputDurationForCassandra = duration.toString() ;

和解析。

代码语言:javascript
复制
Duration duration = Duration.parse( myCassandraDurationString ) ;

请注意,Java使用Duration类表示天(通用的24小时块,而不是日历日)、小时、分钟和秒。Period类表示年、月、日。将这两个概念结合起来通常是没有意义的。但是如果您坚持,您可以使用项目库中的PeriodDuration类。

票数 3
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/50683434

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档