我想将字符串日期转换为Cassandra时间戳格式
示例日期 String inputDate =" 20170525"
答案 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 8及更高版本中。这些类取代了麻烦的旧legacy日期时间类,例如java.util.Date
,Calendar
和& SimpleDateFormat
现在位于Joda-Time的maintenance mode项目建议迁移到java.time类。
要了解详情,请参阅Oracle Tutorial。并搜索Stack Overflow以获取许多示例和解释。规范是JSR 310。
从哪里获取java.time类?
ThreeTen-Extra项目使用其他类扩展java.time。该项目是未来可能添加到java.time的试验场。您可以在此处找到一些有用的课程,例如Interval
,YearWeek
,YearQuarter
和more。