我的日期时间是一个字符串(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()
进行比较?欢迎所有提示
答案 0 :(得分:2)
你的代码实际上很好。你的错误在于这个假设:“strptime
产生的日期时间是在运行此代码的机器的时区中。”
datetime.strptime(date_str, '%Y-%m-%d %H:%M')
将生成天真日期时间,表示您所说的UTC时间。
datetime.utcnow()
将生成天真日期时间,表示当前UTC时间。
因此差异将是准确的。