我有一个日期时间作为字符串(2016-12-31 23:59
),我知道它是用UTC定义的。我现在想使用 Python 获取时间增量。我正在执行此操作的机器通常位于 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。
我找到了这个答案,但这假设你知道运行代码的机器的时区,而我不知道。
有没有办法将 UTC 时区添加到我从datetime.strptime()
获得的datetime
对象中,以便我可以将其与utcnow()
进行比较?欢迎所有提示
你的代码实际上很好。您的错误在于此假设:"由strptime
生成的日期时间位于运行此代码的计算机的时区中。
datetime.strptime(date_str, '%Y-%m-%d %H:%M')
将生成一个朴素的日期时间,表示您所说的 UTC 时间。
datetime.utcnow()
将生成一个以 UTC 表示当前时间的朴素日期时间。
所以差异将是准确的。