无法将日期转换为UTC

时间:2019-08-26 15:34:29

标签: python datetime pytz

我有一个包含UTC日期和时间的字符串(不是字符串的一部分,但我知道它是UTC)。因此,我使用以下代码创建了一个已知的datetime对象:

>>> 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'

现在一切似乎都很好,但是如果我在外壳中这样做:

$ TZ=UTC date -d @1535757300
Fri Aug 31 23:15:00 UTC 2018

我不是应该得到Sat Sep 1 00:15:00 UTC 2018吗(也就是我开始的同一天)?

2 个答案:

答案 0 :(得分:0)

您需要使用以下内容:

int((start_time - datetime.datetime(1970,1,1)).total_seconds())

因为您使用的是strftime,所以它所引用的系统时间可能是您当地的时区。像上面这样自己计算会更可靠。

编辑:

OP的后续帖子指出,仅使用start_time.timestamp()会更容易,但这仅在Python 3.3 *及更高版本中有效。

答案 1 :(得分:0)

经过更多尝试后,看来https://docs.python.org/3/library/datetime.html#strftime-strptime-behavior官方文档中列出的格式说明符中不支持%s。相反,我使用timestamp()方法获得了正确的结果:

>>> start_time.timestamp()
1535760900.0