将python datetime转换为时间戳并以UTC格式返回仍然使用本地时区

时间:2011-05-10 21:22:57

标签: python datetime time pytz

我正在使用一个代码,它给了我utc时间戳,我想将它们转换为适当的日期时间。不幸的是,当我用pytz测试简单的情况时,日期时间增加了6个小时(CST偏移到UTC)。我需要保持时区数据的正确性,因为我正在计算其他时区之间的差异。任何想法为什么以及如何将utc时间戳转换为utc日期时间?

In [1]: import pytz

In [2]: from datetime import datetime

In [3]: import time

In [4]: datetime.fromtimestamp(time.mktime(datetime(7,1,1, tzinfo=pytz.UTC).timetuple()), tz=pytz.UTC)
Out[4]: datetime.datetime(2007, 1, 1, 6, 0, tzinfo=<UTC>)

In [5]: datetime.fromtimestamp(time.mktime(datetime(7,1,1).utctimetuple()), tz=pytz.UTC)
Out[5]: datetime.datetime(2007, 1, 1, 6, 0, tzinfo=<UTC>)

In [6]: datetime.fromtimestamp(time.mktime(datetime(7,1,1).utctimetuple()))
Out[6]: datetime.datetime(2007, 1, 1, 0, 0)

3 个答案:

答案 0 :(得分:75)

从“纪元以来的秒数”时间戳中获取一个表示UTC时间的天真日期时间对象:

from datetime import datetime

utc_dt = datetime.utcfromtimestamp(ts)

如果您想获得UTC时区的感知日期时间对象:

import pytz

aware_utc_dt = utc_dt.replace(tzinfo=pytz.utc)

将其转换为其他时区:

tz = pytz.timezone('America/Montreal')
dt = aware_utc_dt.astimezone(tz)

直接将时间戳转换为给定时区中的知晓日期时间对象:

dt = datetime.fromtimestamp(ts, tz)

答案 1 :(得分:17)

嗯,我在这里找到答案:How to specify time zone (UTC) when converting to Unix time? (Python)

In [101]: ts = calendar.timegm(datetime(2010, 7, 1, tzinfo=pytz.utc).timetuple())

In [102]: datetime.fromtimestamp(ts, tz=pytz.utc)
Out[102]: datetime.datetime(2010, 7, 1, 0, 0, tzinfo=<UTC>)

答案 2 :(得分:1)

您是否碰巧在美国CST时区或同等时间?

看起来它显示当地时间是2007年1月1日午夜时的UTC时间。