答案 0 :(得分:29)
from datetime import datetime, timedelta
datetime.utcnow() + timedelta(minutes=5)
答案 1 :(得分:9)
答案 2 :(得分:5)
对于那些最终在这里寻找将日期时间对象转换为自UNIX时代以来的UTC秒的方法的人:
import time
import datetime
t = datetime.datetime.now()
utc_seconds = time.mktime(t.timetuple())
答案 3 :(得分:2)
答案 4 :(得分:2)
我找到了一种方法来获取当前时间,向其添加timedelta对象,将结果转换为UTC,并在RFC 2822中输出:
time.strftime("%a, %d-%b-%Y %H:%M:%S GMT",
time.gmtime(time.time() + datetime.timedelta(minutes=5).seconds))
这并没有完全回答我的问题,但是我把它放在这里,因为在我的情况下它可以帮助别人。
编辑:我想补充一点,这个技巧只有在timedelta不到一天的情况下才有效。如果你想要一些适用于任何timedelta值的东西,你可以使用timedelta.total_seconds()
(适用于Python 2.7及更高版本)或86400*timedelta.days + timedelta.seconds
。我实际上没有尝试过,所以我不能100%确定它是否有用。
答案 5 :(得分:2)
从日期字符串转换为UTC:
from time import mktime
from datetime import datetime
mktime(datetime.utctimetuple(datetime.strptime("20110830_1117","%Y%m%d_%H%M")))
答案 6 :(得分:2)
这是一个适用于Python 2和3的stdlib解决方案(没有第三方模块)。
以RFC 2822格式获取当前UTC时间:
>>> from email.utils import formatdate
>>> formatdate(usegmt=True)
'Fri, 27 Mar 2015 08:29:20 GMT'
要获得未来5分钟的UTC时间:
#!/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
答案 7 :(得分:1)
解决方案:
>>> 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'>)
它允许轻松地在不同时区之间转换日期时间
答案 8 :(得分:0)
使用以下内容:
from datetime import timezone
utc_datetime = local_datetime.astimezone().astimezone(timezone.utc).replace(tzinfo=None)
鉴于假定原始日期时间对象具有本地日期时间,则可以使用以下方法调用序列将其转换为表示相同UTC时间的原始UTC日期时间(使用Python 3.6.3测试)。
示例:
>>> local_datetime = datetime.now()
>>> local_datetime
datetime.datetime(2019, 12, 14, 10, 30, 37, 91818)
>>> local_datetime.astimezone()
datetime.datetime(2019, 12, 14, 10, 30, 37, 91818, tzinfo=datetime.timezone(datetime.timedelta(-1, 68400), 'Eastern Standard Time'))
>>> local_datetime.astimezone().astimezone(timezone.utc)
datetime.datetime(2019, 12, 14, 15, 30, 37, 91818, tzinfo=datetime.timezone.utc)
>>> local_datetime.astimezone().astimezone(timezone.utc).replace(tzinfo=None)
datetime.datetime(2019, 12, 14, 15, 30, 37, 91818)
注意:真正不需要第一个astimezone()是因为Python文档中的此注释:
在3.6版中进行了更改:现在可以在以下位置调用astimezone()方法: 假定代表系统本地时间的幼稚实例。