Python datetime and utc offset conversion ignoring timezone/daylight savings
我有两个我想要执行的操作,一个是另一个的反转。
我有一个UTC的UNIX时间戳,例如,1425508527。从这里我想得到UTC偏移量的年,月,日等。例如。什么是年/月/日/时间(UTC -6小时)?答案是2015年3月4日16:35:27。如果没有提供抵消(或抵消零),答案应该是2015年3月4日22:35:27。
现在我在某个位置有日期,以及UTC偏移量。例如2015年3月4日16:35:27和偏移量(UTC -6小时)。我应该获得的UNIX UTC时间戳应为1425508527。
我几乎可以这样做2.(使用python datetime库):
1 2 3 4 5 6 7 8 | 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必须给出错误的符号。根据此地图,utc_offset应设置为-6。第1号。我没有运气。我不需要/想要处理夏令时等时区信息。我如何在Python中实现它?
如果你的系统使用Unix时间,那么
不计算闰秒,然后转换可以按如下方式完成:
第1部分:时间戳和本地日期的偏移量
1 2 3 4 5 6 7 8 9 10 11 12 13 | 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部分:本地日期和时间戳的偏移量
1 2 3 4 5 6 7 8 | utcdate = localdate - DT.timedelta(hours=offset) assert date == utcdate timetuple = utcdate.utctimetuple() timestamp2 = calendar.timegm(timetuple) print(timestamp2) # 1425508527 assert timestamp == timestamp2 |