关于日期:Python日期时间和utc偏移转换忽略时区/夏令时

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