我知道 Cassandra 将 UTC 时间的数据存储在时间戳列中,但我需要它来存储时间戳,如下所示(UTC+2,中欧时间):
2023-10-29 00:00:00.000000+0200
2023-10-29 01:00:00.000000+0200
2023-10-29 02:00:00.000000+0200
2023-10-29 02:00:00.000000+0100
...
2023-10-29 23:00:00.000000+0200
如您所见,2023 年 10 月 29 日有 25 小时,2023 年 3 月有 23 小时。
传输到 Cassandra 时,上面的时间戳变为:
2023-10-28 22:00:00.000000+0000
2023-10-28 23:00:00.000000+0000
2023-10-29 00:00:00.000000+0000
2023-10-29 01:00:00.000000+0000
...
2023-10-29 21:00:00.000000+0000
这不是想要的结果。
因为我在选择数据的时候需要进行查询,例如
select * FROM series_op_test WHERE as_of='2022-09-30' AND name='LU_STC' AND time < '2023-10-30' AND time >= '2023-10-28';
。
而且,如果可能的话,我不想在选择数据之前或/和之后以及通过 API 插入数据时以编程方式进行任何更改/转换。
有什么想法吗?
CQL
timestamp
数据类型编码为自 Unix 纪元(1970 年 1 月 1 日 00:00 GMT)以来的毫秒数,因此以下说法不正确:
...Cassandra 将 UTC 时间的数据存储在时间戳列中...
例如,
2023-10-29 00:00:00.000000+0200
(CET)被编码为 1698530400000
毫秒。在cqlsh中,以UTC显示为:
2023-10-28 22:00:00.000000+0000
因为它(cqlsh)默认显示 UTC 时间戳。您可以使用 pytz
库覆盖默认值并显示另一个时区的时间戳。
要直接回答您的问题,您不能将“CET”中的日期/时间存储在
timestamp
列中,但您可以使用 +0200
将时间戳存储在 CET 中,并且它将被编码为自纪元以来的等效毫秒数。干杯!