How can I convert a Python datetime object to UTC?
我有一个python datetime对象,我想转换为UTC。 我计划以RFC 2822格式输出它以放入HTTP标头,但我不确定这对于这个问题是否重要。 我在这个网站上找到了一些关于转换时间对象的信息,它看起来更简单,但这次我真的想使用datetime对象,因为我使用timedeltas来调整它们:
我试过这样的事情:
1 2 3 4 5 | from datetime import datetime, timedelta now = datetime.now() fiveMinutesLater = datetime.now() + timedelta(minutes=5) fiveMinutesLaterUtc = ??? |
时间或日期时间模块中的任何内容看起来都不会对我有所帮助。 看起来我可以通过将datetime对象传递给3或4个函数来完成它,但我想知道是否有更简单的方法。
我宁愿不使用第三方模块,但我可能会认为它是唯一合理的选择。
1 2 | from datetime import datetime, timedelta datetime.utcnow() + timedelta(minutes=5) |
首先,您需要通过设置其
http://docs.python.org/library/datetime.html#datetime.tzinfo
然后,您可以使用
http://docs.python.org/library/datetime.html#datetime.datetime.astimezone
对于那些最终在这里寻找将日期时间对象转换为自UNIX时代以来的UTC秒的方法的人:
1 2 3 4 5 | import time import datetime t = datetime.datetime.now() utc_seconds = time.mktime(t.timetuple()) |
这是一个适用于Python 2和3的stdlib解决方案(没有第三方模块)。
以RFC 2822格式获取当前UTC时间:
1 2 3 | >>> from email.utils import formatdate >>> formatdate(usegmt=True) 'Fri, 27 Mar 2015 08:29:20 GMT' |
要在未来5分钟获得UTC时间:
1 2 3 4 5 6 | #!/usr/bin/env python import time from email.utils import formatdate print(formatdate(time.time() + 300, usegmt=True)) # 5 minutes into the future # -> Fri, 27 Mar 2015 08:34:20 GMT |
要从日期字符串转换为UTC:
1 2 3 4 | from time import mktime from datetime import datetime mktime(datetime.utctimetuple(datetime.strptime("20110830_1117","%Y%m%d_%H%M"))) |
我找到了一种方法来获取当前时间,向其添加timedelta对象,将结果转换为UTC,并在RFC 2822中输出:
1 2 | time.strftime("%a, %d-%b-%Y %H:%M:%S GMT", time.gmtime(time.time() + datetime.timedelta(minutes=5).seconds)) |
这并没有完全回答我的问题,但是我把它放在这里是因为它可以帮助我的情况下的其他人。
编辑:我想补充一点,这个技巧只有在timedelta不到一天的情况下才有效。如果你想要一些适用于任何timedelta值的东西,你可以使用
您可以在email.Utils模块中使用formatdate方法,如下所示
1 2 3 | >>> from email.Utils import formatdate >>> print formatdate() Sun, 25 Jul 2010 04:02:52 -0000 |
以上是RFC 2822格式的日期时间。默认情况下,它返回UTC时间,但是如果您需要本地时间,则可以调用formatdate(localtime = True)。
有关更多信息,请查看http://docs.python.org/library/email.mime.html#module-email.util
解决方案与梦幻般的Delorean lib:
1 2 3 4 5 6 7 8 9 10 11 12 | >>> import datetime >>> import delorean >>> dt = datetime.datetime.now() >>> dl = delorean.Delorean(dt, timezone='US/Pacific') >>> dl.shift('UTC') Delorean(datetime=2015-03-27 03:12:42.674591+00:00, timezone=UTC) >>> dl.shift('UTC').datetime datetime.datetime(2015, 3, 27, 3, 12, 42, 674591, tzinfo=<UTC>) >>> dl.shift('EST').datetime datetime.datetime(2015, 3, 26, 22, 12, 42, 674591, tzinfo=<StaticTzInfo 'EST'>) |
它允许轻松地在不同时区之间转换日期时间