datetime—无时区的avro源连接器中的时间戳字段

xienkqul  于 2021-06-06  发布在  Kafka
关注(0)|答案(0)|浏览(230)

我有一个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)

暂无答案!

目前还没有任何答案,快来回答吧!

相关问题