UTCNow offsetting in Python

6 浏览
0 Comments

UTCNow offsetting in Python

我应该如何精确地将由datetime.utcnow()返回的时间戳按任意时间偏移,比如一天?

例如:

now = datetime.utcnow().isoformat() + 'Z'

我需要将上述时间向前偏移一天。当我的脚本跨入夏令时转换时,会遇到一个小问题,但我不需要查看夏令时之前的时间,因为它也会加载今天的日期,而脚本在处理今天的日期时会出错。

0
0 Comments

问题出现的原因是因为在Python中使用UTCNow进行偏移时,会根据系统的时区产生不同的值。解决方法是使用datetime.datetime.now(tz=timezone.utc)代替utcnow()。

代码如下:

from datetime import datetime, timedelta
from datetime import timezone
now = (datetime.now(tz=timezone.utc) + timedelta(days=3)).isoformat() + 'Z'
print(now)

输出结果:

2018-11-06T16:55:06.535804Z

更多关于Python中使用时区的信息可以在Python UTC datetime object's ISO format doesn't include Z (Zulu or Zero offset)找到。

在Python 3.7中,datetime.strptime和datetime.strftime甚至可以识别01:30作为%z,而在3.6版本中,冒号会导致程序崩溃。

感谢提供帮助,我原本无法弄清楚如何配对这两个函数。这个方法完美解决了我的问题。

不要使用utcnow(),因为它会根据系统的时区产生不同的值。请改用datetime.datetime.now(tz=timezone.utc)。

0