我有一个包含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
吗(也就是我开始的同一天)?
答案 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