我可以存储欧洲中部时间 (UTC+2) 的时间戳吗?

问题描述 投票:0回答:1

我知道 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 插入数据时以编程方式进行任何更改/转换。

有什么想法吗?

cassandra timestamp-with-timezone datastax-astra
1个回答
0
投票

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 中,并且它将被编码为自纪元以来的等效毫秒数。干杯!

© www.soinside.com 2019 - 2024. All rights reserved.