TL;DR:使用
datetime.fromisoformat(f"{utc_time_string}+00:00").timestamp() * 1000
你对这个错误的观察是正确的.And that's because:
Naive 100 instances are assumed to represent local time,并且该方法依赖于平台C mktime()
功能来执行转换.
这些文档还展示了如何从表示UTC的朴素DateTime对象中获取时间戳:
timestamp = dt.replace(tzinfo=timezone.utc).timestamp()
因此,您可以这样做:
(
datetime
.strptime('2023-08-02 14:52:05', '%Y-%m-%d %H:%M:%S')
.replace(tzinfo=timezone.utc)
.timestamp() * 1000
)
输出1690987925000.0
等于GMT: Wednesday, August 2, 2023 2:52:05 PM
由于您的DATETIME字符串看起来几乎是ISO的,因此您还可以在转换前使用.fromisoformat()
并在字符串末尾添加"+00:00".它将生成一个支持TZ的DateTime对象,并由.timestamp()
正确处理:
utc_time_string = '2023-08-02 14:52:05'
(
datetime
.fromisoformat(f"{utc_time_string}+00:00")
.timestamp() * 1000
)
# fits nicely on one line
datetime.fromisoformat(f"{utc_time_string}+00:00").timestamp() * 1000
也输出1690987925000.0
.
Python 3.11 onwards, you can add the suffix "Z",而不是"+00:00".