如何在Python中获取UTC和utcnow中的日期时间之间的差异

时间:2017-10-15 20:53:26

标签: python datetime timezone utc

我的日期时间是一个字符串(2016-12-31 23:59),我知道它是用UTC定义的。我现在想用Python获得timedelta。我执行此操作的计算机通常位于CEST时区(Europe/Amsterdam),但情况可能并非总是如此,因此我不想在此区域对此时区进行硬编码。代码。

对于本地时区,这将很有用:

date_str = '2016-12-31 23:59'
print datetime.now() - datetime.strptime(date_str, '%Y-%m-%d %H:%M')

这显然不是正确的,但将其更改为使用utcnow()也是不正确的:

print datetime.utcnow() - datetime.strptime(date_str, '%Y-%m-%d %H:%M')

这不能正常工作,因为现在strptime产生的日期时间是运行此代码的机器的时区,而utcnow()是UTC。

我找到了this SO answer,但是假设您知道代码运行的机器的时区,我不会这样做。

有没有办法可以将UTC时区添加到datetime的{​​{1}}对象中,以便我可以将其与datetime.strptime()进行比较?欢迎所有提示

1 个答案:

答案 0 :(得分:2)

你的代码实际上很好。你的错误在于这个假设:“strptime产生的日期时间是在运行此代码的机器的时区中。”

datetime.strptime(date_str, '%Y-%m-%d %H:%M')将生成天真日期时间,表示您所说的UTC时间。

datetime.utcnow()将生成天真日期时间,表示当前UTC时间。

因此差异将是准确的。