datetime:获取带有时区偏移量的时间戳
datetime: get timestamp with timezone offset
我想从以下格式的日期中获取时间戳:
Mon, 23 Nov 2020 19:00:00 GMT
Mon, 23 Nov 2020 20:00:00 +0100
我正在使用以下语句将日期转换为 datetime
对象:
dateobj = datetime.datetime.strptime(date, '%a, %d %b %Y %H:%M:%S %Z')
dateobj = datetime.datetime.strptime(date, '%a, %d %b %Y %H:%M:%S %z')
但是使用.timestamp()
方法,打印出与纪元不同的秒数。为什么 %Z
指令不向 datetime
对象添加时区信息?我怎样才能考虑时区,使时间戳相等?
请注意 . Your problem is %Z
, it makes strptime
accept certain strings (GMT, UTC and any value in time.tzname - docs),但实际上并没有从中得到任何东西。返回的 datetime 对象是原始的 - 这就是为什么 Python 会假设它是本地时间,如果你调用它的 timestamp()
方法。
您可以改用 dateutil 的解析器:
from dateutil.parser import parse
for s in ("Mon, 23 Nov 2020 19:00:00 GMT", "Mon, 23 Nov 2020 20:00:00 +0100"):
dt = parse(s)
print(repr(dt), dt.timestamp())
# datetime.datetime(2020, 11, 23, 19, 0, tzinfo=tzutc()) 1606158000.0
# datetime.datetime(2020, 11, 23, 20, 0, tzinfo=tzoffset(None, 3600)) 1606158000.0
我想从以下格式的日期中获取时间戳:
Mon, 23 Nov 2020 19:00:00 GMT
Mon, 23 Nov 2020 20:00:00 +0100
我正在使用以下语句将日期转换为 datetime
对象:
dateobj = datetime.datetime.strptime(date, '%a, %d %b %Y %H:%M:%S %Z')
dateobj = datetime.datetime.strptime(date, '%a, %d %b %Y %H:%M:%S %z')
但是使用.timestamp()
方法,打印出与纪元不同的秒数。为什么 %Z
指令不向 datetime
对象添加时区信息?我怎样才能考虑时区,使时间戳相等?
请注意 %Z
, it makes strptime
accept certain strings (GMT, UTC and any value in time.tzname - docs),但实际上并没有从中得到任何东西。返回的 datetime 对象是原始的 - 这就是为什么 Python 会假设它是本地时间,如果你调用它的 timestamp()
方法。
您可以改用 dateutil 的解析器:
from dateutil.parser import parse
for s in ("Mon, 23 Nov 2020 19:00:00 GMT", "Mon, 23 Nov 2020 20:00:00 +0100"):
dt = parse(s)
print(repr(dt), dt.timestamp())
# datetime.datetime(2020, 11, 23, 19, 0, tzinfo=tzutc()) 1606158000.0
# datetime.datetime(2020, 11, 23, 20, 0, tzinfo=tzoffset(None, 3600)) 1606158000.0