字符串到Cassandra时间戳

时间:2017-05-21 18:59:11

标签: java cassandra

我想将字符串日期转换为Cassandra时间戳格式

示例日期     String inputDate =" 20170525"

2 个答案:

答案 0 :(得分:0)

您需要将字符串转换为Date Java Date类型映射cassandra timestamp类型

DateFormat dateFormat = new SimpleDateFormat("yyyyMMdd");
Date date = dateFormat.parse("20170525");

现在您可以在prepared statement

中插入或查询日期

注意:您没有timezone。因此将使用默认时区。如果要使用dateFormat.setTimeZone(TimeZone zone)方法指定时区

答案 1 :(得分:0)

首先,将输入字符串解析为LocalDate

LocalDate ld = LocalDate.parse( "20170525" , DateTimeFormatter.BASIC_ISO_DATE ) ;

对于没有时间的仅限日期的值,您应该根据this documentation在Cassandra中使用Date类型。

您可以使用标准ISO 8601格式将数据作为字符串进行交换。默认情况下,java.time类使用标准格式。因此无需指定格式化模式。

String output = ld.toString() ;
  

2017年5月25日

如果您确实想要存储在timestamp中,则必须指定时间。也许你想要一天的第一时刻。确定需要时区的时间轴上的特定时刻。不要假设第一时刻发生在00:00:00。夏令时等异常表示时间可能是01:00:00等其他值。

ZoneId z = ZoneId.of( "America/Montreal" ) ;
ZonedDateTime zdt = ld.atStartOfDay( z ) ;
  

zdt.toString():2017-05-25T00:00:00-04:00 [America / Montreal]

Cassandra仅将Timestamp字段存储为UTC。因此,我们需要将ZonedDateTime从我们所需的时区调整为UTC。最简单的方法是提取Instant。根据定义,Instant类始终为UTC。

Instant instant = zdt.toInstant() ;

为Cassandra生成标准ISO 8601格式的字符串。注意小时如何从零跳到四。我们的时区America/Montreal在该日期落后于UTC四小时。因此,达到UTC意味着增加4小时,0 + 4 = 4。

String output = instant.toString() ;
  

2017-05-25T04:00:00Z

当你检索这个值时,走另一条路。

Instant instant = Instant.parse( "2017-05-25T04:00:00Z" ) ;
ZonedDateTime zdt = instant.atZone( z );

关于java.time

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

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

要了解详情,请参阅Oracle Tutorial。并搜索Stack Overflow以获取许多示例和解释。规范是JSR 310

从哪里获取java.time类?

ThreeTen-Extra项目使用其他类扩展java.time。该项目是未来可能添加到java.time的试验场。您可以在此处找到一些有用的课程,例如IntervalYearWeekYearQuartermore