根据 this,to_timestamp 将其转换为本地计算机的时区。
我的机器时区是UTC。
运行此命令时:
select
to_timestamp("2024-09-20 19-00-00+0530","yyyy-MM-dd HH-mm-ssZ") as ist_offset,
to_timestamp("2024-09-20 19-00-00IST","yyyy-MM-dd HH-mm-ssz") as ist_abbreviation
我得到这个输出:
ist_offset | ist_缩写 |
---|---|
2024-09-20 13:30:00.000 | 2024-09-20 17:00:00.000 |
对于
ist_offset
它生成了正确的时区,但对于 ist_abbreviation
它做了一些转换,但不确定是哪个时区以及为什么它给出不同的时区?
我也在网上查看了 pyspark 文档和不同的博客,但找不到任何东西。有人可以帮助我如何使用缩写作为时区进行时区转换,因为我被限制不能使用偏移量或正确的时区,如“亚洲/加尔各答”。
我觉得 IST 可能存在歧义,可能是印度标准时间 (UTC+5:30)、爱尔兰标准时间 (UTC+01:00) 或以色列标准时间 (UTC+02:00)
您需要添加偏移量或指定时区
具体来说也许是这样的 udf -
def parse_timestamp_with_ist(timestamp_str):
if 'IST' in timestamp_str:
dt = datetime.strptime(timestamp_str, "%Y-%m-%d %H-%M-%SIST")
return dt - timedelta(hours=5, minutes=30)
else:
return datetime.strptime(timestamp_str, "%Y-%m-%d %H-%M-%S")