当我在DataStax DevCenter中提供此查询时,将返回2行。返回的行是12月30日那个应该是的。
SELECT * FROM abc.alerts_by_type_and_timestamp WHERE alert_type IN ('Permanent Fault', 'Temporary Fault') AND alert_timeStamp >= '2015-12-30T15:00+0000' AND alert_timeStamp <= '2015-12-31T15:00+0000'
但是像这样在PreparedStatement中运行
SELECT * FROM abc.alerts_by_type_and_timestamp WHERE alert_type IN :alertTypes AND alert_timeStamp >= :minTimestamp AND alert_timeStamp <= :maxTimestamp
返回4行以下。
17:52:48,587 INFO [stdout] (default task-39) minTimestamp: 2015-12-30 15:00:00.0 - maxTimestamp : 2015-12-31 15:00:00.0
17:52:50,904 INFO [stdout] (default task-39) row : Row[Permanent Fault, Thu Dec 31 12:09:22 PST 2015, 2015, 365, .....]
17:52:50,904 INFO [stdout] (default task-39) row : Row[Permanent Fault, Thu Dec 31 12:08:14 PST 2015, 2015, 365, ....]
17:52:50,905 INFO [stdout] (default task-39) row : Row[Temporary Fault, Thu Dec 31 12:09:22 PST 2015, 2015, 365, ...]
17:52:50,906 INFO [stdout] (default task-39) row : Row[Temporary Fault, Thu Dec 31 12:08:14 PST 2015, 2015, 365, ...]
17:52:50,906 INFO [stdout] (default task-39) count is : 4
我认为这是由于时间转换造成的。数据存储为GMT,但不知何故,PreparedStatement将其传递给PST ??
如何解决此问题?
我也试过这个:
DateTime dateTime = new DateTime(minTimestamp.getTime(), DateTimeZone.UTC);
DateTime dateTime2 = new DateTime(maxTimestamp.getTime(), DateTimeZone.UTC);
BoundStatement stmtByAlertTypeAndTimestamp = pStmt.bind()
.setTimestamp("minTimestamp", new Timestamp(dateTime.getMillis()))
.setTimestamp("maxTimestamp", new Timestamp(dateTime2.getMillis()))
.setList("Types", Types);
在日期时间打印时间:
minTimestamp: 2016-07-19 17:00:00.0
maxTimestamp: 2016-07-26 00:00:00.0
由于
答案 0 :(得分:0)
您应该更改文件 $ CASSANDRA_HOME / pylib / cqlshlib / formatter.py
将函数strftime更改为
def strftime(time_format, seconds):
tzless_dt = datetime_from_timestamp(seconds)
return tzless_dt.replace(tzinfo=pytz.utc).astimezone(pytz.timezone('Asia/Kolkata')).strftime(time_format)
并导入pytz库
我这样做是为了将cqlsh输出更改为IST。您可以根据需要更改时区
说明:实际上cassandra始终将数据存储在GMT中,并且准备好的语句在本地时区(系统时区)中占用时间,因此您的结果在两个查询中都不同。
还有一项工作可以在准备好的语句中传递数据时间和时区,然后据我说它应该可以正常工作
希望有所帮助