Search code examples
pythondatetimeleap-second

Python - Datetime not accounting for leap second properly?


I am parsing some data that has the leapsecond timestampe datetime 2012-06-30T23:59:60.209215. I used following code to parse that string and convert to a datetime object:

    nofrag, frag = t.split('.')
    nofrag_dt = datetime.datetime.strptime(nofrag, "%Y-%m-%dT%H:%M:%S")
    dt = nofrag_dt.replace(microsecond=int(frag))

Python documentation claims that this shouldn't be an issue as %S accepts [0, 61]. But, I get this error with the above timestamp

nofrag_dt = datetime.datetime.strptime(nofrag, "%Y-%m-%dT%H:%M:%S")
ValueError: second must be in 0..59

Thanks


Solution

  • Do this:

    import time
    import datetime 
    t = '2012-06-30T23:59:60.209215'
    nofrag, frag = t.split('.')
    nofrag_dt = time.strptime(nofrag, "%Y-%m-%dT%H:%M:%S")
    ts = datetime.datetime.fromtimestamp(time.mktime(nofrag_dt))
    dt = ts.replace(microsecond=int(frag))
    print(dt)
    

    Output is:

    2012-07-01 00:00:00.209215