如何获取UTC中的日期时间和Python中的utcnow之间的差异
问题描述:
我有一个日期时间作为字符串(2016-12-31 23:59
),我知道它是用UTC定义的。我现在想用Python获取timedelta。我正在执行此操作的计算机通常位于CEST时区(Europe/Amsterdam
),但这可能并非总是如此,因此我不想在代码中对此时区进行硬编码。如何获取UTC中的日期时间和Python中的utcnow之间的差异
对于本地时区,这将极大的工作:
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.strptime()
获得的datetime
对象,以便我可以将其与utcnow()
进行比较?欢迎所有提示
答
您的代码实际上很好。你的错误在于这个假设:“由strptime
产生的日期时间在这个代码运行的机器的时区中。”
datetime.strptime(date_str, '%Y-%m-%d %H:%M')
将产生一个幼稚 datetime表示您所说的UTC时间。
datetime.utcnow()
将产生一个幼稚 datetime代表UTC中的当前时间。
所以差异将是准确的。