我有一个sql datetime字段 DT
我想用avro输入Kafka。 DT
在当地时间,但没有时区;存储在另一列中 TZ
作为与utc的偏移量(以分钟为单位)。似乎avro时间戳millis适用于 DT
,但我对转换感到困惑,因为缺少时区。从连接器源代码来看,我认为它只是默认为utc。
这就提出了问题:
所有明显相似的datetimes是否会转换为自/a epoch以来的相同毫秒数,而不管它们的标称时区是什么?比如说,你知道吗 (2018-01-01T00:00Z).to_timestamp_ms()
== (2018-01-01T00:00).to_timestamp_ms()
== (2018-01-01T00:00+05).to_timestamp_ms()
?
更重要的是,是否可以通过减去时区偏移量在摄取后转换为真正的utc TZ
从datetime字段 DT
(从某个纪元开始现在是以毫秒为单位的)?换言之,如果连接器错误地假定了utc,并且错误地将datetime解释为utc,那么通过减去偏移量可以恢复真正的datetime吗?
有关转换步骤的详细信息
我认为连接器上的操作顺序是这样的(基本上是我无法控制的):
tz = read_field_as_int('tz')
dt = read_field_as_string('dt')
parsed_datetime = datetime(dt, timezone=UTC)
message = {
'dt': parsed_datetime.to_timestamp_ms(),
'tz': tz
}
producer.produce(message)
然后,在消费者中,也许这会起作用?
ms_per_min = 60 * 1000
message = consumer.poll()
true_timestamp = message['dt'] - message['tz'] * ms_per_min
true_dt = datetime.from_timestamp(true_timestamp, timezone=UTC)
暂无答案!
目前还没有任何答案,快来回答吧!