Convert timestamps with offset to datetime obj using strptime

前端 未结 4 574

I am trying to convert time-stamps of the format \"2012-07-24T23:14:29-07:00\" to datetime objects in python using strptime method. The problem is with the time offset at t

4条回答
  •  孤城傲影
    2020-11-22 04:24

    In Python 3.7+:

    from datetime import datetime
    
    time_str = "2012-07-24T23:14:29-07:00"
    dt_aware = datetime.fromisoformat(time_str)
    print(dt_aware.isoformat('T'))
    # -> 2012-07-24T23:14:29-07:00
    

    In Python 3.2+:

    from datetime import datetime
    
    time_str = "2012-07-24T23:14:29-0700"
    dt_aware = datetime.strptime(time_str, '%Y-%m-%dT%H:%M:%S%z')
    print(dt_aware.isoformat('T'))
    # -> 2012-07-24T23:14:29-07:00
    

    Note: Before Python 3.7 this variant didn't support : in the -0700 part (both formats are allowed by rfc 3339). See datetime: add ability to parse RFC 3339 dates and times.

    On older Python versions such as Python 2.7, you could parse the utc offset manually:

    from datetime import datetime
    
    time_str = "2012-07-24T23:14:29-0700"
    # split the utc offset part
    naive_time_str, offset_str = time_str[:-5], time_str[-5:]
    # parse the naive date/time part
    naive_dt = datetime.strptime(naive_time_str, '%Y-%m-%dT%H:%M:%S')
    # parse the utc offset
    offset = int(offset_str[-4:-2])*60 + int(offset_str[-2:])
    if offset_str[0] == "-":
       offset = -offset
    dt = naive_dt.replace(tzinfo=FixedOffset(offset))
    print(dt.isoformat('T'))
    

    where FixedOffset class is defined here.

提交回复
热议问题