【发布时间】:2019-12-30 19:45:10
【问题描述】:
我有一个包含 UTC 日期和时间的字符串(不是字符串的一部分,但我知道它是 UTC)。所以我使用以下代码创建了一个感知日期时间对象:
>>> import datetime
>>> import pytz
>>> mystr = '01/09/2018 00:15:00'
>>> start_time = pytz.utc.localize(datetime.datetime.strptime(mystr, '%d/%m/%Y %H:%M:%S'))
>>> start_time
datetime.datetime(2018, 9, 1, 0, 15, tzinfo=<UTC>)
>>> str(start_time)
'2018-09-01 00:15:00+00:00'
>>> start_time.strftime('%s')
'1535757300'
现在一切似乎都很好,但如果我在 shell 中这样做:
$ TZ=UTC date -d @1535757300
Fri Aug 31 23:15:00 UTC 2018
我不应该得到Sat Sep 1 00:15:00 UTC 2018 代替(即,我开始的同一日期)?
【问题讨论】:
-
如果你做相反的事情 (
datetime.datetime.fromtimestamp(1535757300)) 你会得到与 date 实用程序相同的结果 -
当我运行你的代码时,我从
start_time.strftime('%s')得到'1535760900'作为我的输出 -
@wpercy 确实,我在另一台机器上尝试过,得到 1535760900。知道这里会发生什么吗?
-
看起来 %s 不在docs.python.org/3/library/… 中列出的格式说明符之列,这让我有点惊讶。
-
您可以使用
datetime.strptime('{}+0000'.format(mystr), '%d/%m/%Y %H:%M:%S%z')简化这一点,以避免本地化步骤。然后用datetime.isoformat()测试结果,避免手动转换问题。