Python datetime和utc offset转换忽略时区/夏令时

时间:2015-03-09 18:52:03

标签: python date datetime utc

我想要执行两个操作,一个是另一个操作的反转。

  1. 我在UTC上有一个UNIX时间戳,例如1425508527.从这里我想得到UTC偏移量的年,月,日等。例如。什么是年/月/日/时间(UTC -6小时)?答案是2015年3月4日16:35:27。如果没有提供抵消(或抵消零),答案应该是2015年3月4日22:35:27。

  2. 现在我在某个位置有日期,以及UTC偏移量。例如2015年3月4日16:35:27和偏移量(UTC -6小时)。我应该得到的UNIX UTC时间戳应该是1425508527.

  3. 我能够几乎做2个(使用python datetime库),如下所示:

    import datetime.datetime as datetime
    import time
    import dateutil.tz as tz
    
    utc_offset = 6
    time.mktime(datetime(2015,3,4,16,35,27,
                         tzinfo=tz.tzoffset(None, utc_offset*60*60)).utctimetuple())
    # => 1425486927
    

    上述问题是utc_offset必须给出错误的符号。根据{{​​3}},utc_offset应设置为-6。第1号。我没有运气。我不需要/想要处理时区信息,如夏令时。我如何在Python中实现它?

1 个答案:

答案 0 :(得分:3)

如果您的系统使用Unix time,那么 不计算闰秒,然后转换可以按如下方式进行:

第1部分:时间戳和本地日期的偏移量

import datetime as DT
import calendar

timestamp = 1425508527
offset = -6

date = DT.datetime(1970,1,1) + DT.timedelta(seconds=timestamp)
print(date)
# 2015-03-04 22:35:27

localdate = date + DT.timedelta(hours=offset)
print(localdate)
# 2015-03-04 16:35:27

第2部分:本地日期和时间戳的偏移量

utcdate = localdate - DT.timedelta(hours=offset)
assert date == utcdate

timetuple = utcdate.utctimetuple()
timestamp2 = calendar.timegm(timetuple)
print(timestamp2)
# 1425508527
assert timestamp == timestamp2