如何将Python日期时间对象转换为UTC?

Eli*_*ria 42 python time datetime utc

我有一个python datetime对象,我想转换为UTC.我计划以RFC 2822格式输出它以放入HTTP标头,但我不确定这对于这个问题是否重要.我在这个网站上找到了一些关于转换时间对象的信息,它看起来更简单,但这次我真的想使用datetime对象,因为我使用timedeltas来调整它们:

我试过这样的事情:

from datetime import datetime, timedelta

now = datetime.now()
fiveMinutesLater = datetime.now() + timedelta(minutes=5)
fiveMinutesLaterUtc = ???
Run Code Online (Sandbox Code Playgroud)

时间或日期时间模块中的任何内容看起来都不会对我有所帮助.看起来我可以通过将datetime对象传递给3或4个函数来实现它,但我想知道是否有更简单的方法.

我宁愿不使用第三方模块,但我可能会认为它是唯一合理的选择.

Sen*_*yai 33

from datetime import datetime, timedelta
datetime.utcnow() + timedelta(minutes=5)
Run Code Online (Sandbox Code Playgroud)

  • 奇怪的是,没有人提到 `utcnow()` [返回](https://docs.python.org/3/library/datetime.html#datetime.datetime.utcnow) 一个 [“天真”日期时间对象 - 与没有时区信息](https://docs.python.org/3/library/datetime.html#aware-and-naive-objects),--所以这很可能不是你想要的。该文档甚至对此有一个警告。 (4认同)
  • 我编辑了答案,提供了天真的日期时间和有意识的日期时间两个选项。 (3认同)

Amb*_*ber 9

首先,您需要通过设置其tzinfo成员来确保日期时间是时区感知对象:

http://docs.python.org/library/datetime.html#datetime.tzinfo

然后,您可以使用该.astimezone()函数进行转换:

http://docs.python.org/library/datetime.html#datetime.datetime.astimezone

  • @ mikez302 - 查看pytz模块.它实际上是所有常见时区的datetime.tzinfo时区定义的数据库. (7认同)

ish*_*ael 6

对于那些最终在这里寻找将日期时间对象转换为自UNIX时代以来的UTC秒的方法的人:

import time
import datetime

t = datetime.datetime.now()
utc_seconds = time.mktime(t.timetuple())
Run Code Online (Sandbox Code Playgroud)

  • 这不准确,来自mktime doc:将当地时间的时间元组转换为自大纪元以来的秒数. (4认同)
  • 这不是 OP 提出的问题的答案。:( (2认同)