converting epoch time with milliseconds to datetime

I have used a ruby script to convert iso time stamp to epoch, the files that I am parsing has following time stamp structure:


Since I want to keep milliseconds I used following ruby code to convert it to epoch time:

    irb(main):010:0> DateTime.parse('2009-03-08T00:27:31.807').strftime("%Q")
    => "1236472051807"

But In python I tried following:

    import time 
    time.strftime('%Y-%m-%d %H:%M:%S', time.gmtime(1236472051807))

But I don't get the original time date time back,

    >>> time.strftime('%Y-%m-%d %H:%M:%S', time.gmtime(1236472051807))
    '41152-03-29 02:50:07'

I wonder is it related to how I am formatting?

Use datetime.datetime.fromtimestamp:

    >>> import datetime
    >>> s = 1236472051807 / 1000.0
    >>> datetime.datetime.fromtimestamp(s).strftime('%Y-%m-%d %H:%M:%S.%f')
    '2009-03-08 09:27:31.807000'

%f directive is only supported by datetime.datetime.strftime, not by time.strftime.

UPDATE Alternative using %, str.format:

    >>> import time
    >>> s, ms = divmod(1236472051807, 1000)  # (1236472051, 807)
    >>> '%s.%03d' % (time.strftime('%Y-%m-%d %H:%M:%S', time.gmtime(s)), ms)
    '2009-03-08 00:27:31.807'
    >>> '{}.{:03d}'.format(time.strftime('%Y-%m-%d %H:%M:%S', time.gmtime(s)), ms)
    '2009-03-08 00:27:31.807'


Back to homepage or read more recommendations: