如何获取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中的当前时间。

所以差异将是准确的。