时间:2010-07-25 03:59:09

标签: python datetime time utc

9 个答案:

答案 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)

使用精彩 Delorean lib

解决方案

>>> 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测试)。

  1. astimezone()添加本地时区,因此不再是天真的。
  2. astimezone(timezone.utc)将其从本地转换为UTC。
  3. replace(tzinfo = None)删除时区,所以它又很幼稚,但现在是UTC

示例:

>>> 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()方法:   假定代表系统本地时间的幼稚实例。