这是这个的后续其他原帖 https://stackoverflow.com/questions/23080188/date-insertion-in-cassandra-db-non-trivial-1h-shift-issue/23083555?noredirect=1#comment35293404_23083555.
环境:
Cassandra 运行在 OpenSuse 上(通过其 Java 虚拟机)。
服务器设置为时区“欧洲/苏黎世”。
测试仅包括此服务器。不涉及其他服务器。
TEST:
"BEGIN BATCH USING CONSISTENCY ONE insert into tsmeasures(id,'2015-01-01 00:00:00','2015-06-01 00:00:00') values ('2812621',1,2) APPLY BATCH"
从 PHP 观察到的结果(在同一 Cassandra 服务器上):
"SELECT '2014-06-01'..'2015-12-01' FROM tsmeasures WHERE id IN(2812621)"
unpacked_value=1420066800, str_time='2015-01-01 00:00:00' <= OK
unpacked_value=1433113200, str_time='2015-06-01 01:00:00' <= NOT OK !
因此,日期被解释为 GMT+1。
解决方案:
在“cassandra_env.sh”中,运行Java时添加选项-Duser.timezone:
JVM_OPTS="$JVM_OPTS -Duser.timezone=Europe/Zurich"
修复后重复测试:
"BEGIN BATCH USING CONSISTENCY ONE insert into tsmeasures(id,'2015-01-01 00:00:00','2015-06-01 00:00:00') values ('2812621',1,2) APPLY BATCH"
修复后从 PHP 观察到的新结果(在同一 Cassandra 服务器上):
"SELECT '2014-06-01'..'2015-12-01' FROM tsmeasures WHERE id IN(2812621)"
unpacked_value=1420066800, str_time='2015-01-01 00:00:00' <= OK
unpacked_value=1433113200, str_time='2015-06-01 00:00:00' <= OK
日期解释为:
- 中欧冬季时间 = GMT+1
- 中欧夏令时间 = GMT+2