How to convert integer timestamp to Python datetime

How to convert integer timestamp to Python datetime

datetime.datetime.fromtimestamp() is correct, except you are probably having timestamp in miliseconds (like in JavaScript), but fromtimestamp() expects Unix timestamp, in seconds.

Do it like that:

>>> import datetime
>>> your_timestamp = 1331856000000
>>> date = datetime.datetime.fromtimestamp(your_timestamp / 1e3)

and the result is:

>>> date
datetime.datetime(2012, 3, 16, 1, 0)

Does it answer your question?

EDIT: J.F. Sebastian correctly suggested to use true division by 1e3 (float 1000). The difference is significant, if you would like to get precise results, thus I changed my answer. The difference results from the default behaviour of Python 2.x, which always returns int when dividing (using / operator) int by int (this is called floor division). By replacing the divisor 1000 (being an int) with the 1e3 divisor (being representation of 1000 as float) or with float(1000) (or 1000. etc.), the division becomes true division. Python 2.x returns float when dividing int by float, float by int, float by float etc. And when there is some fractional part in the timestamp passed to fromtimestamp() method, this methods result also contains information about that fractional part (as the number of microseconds).

Alternatively, you can use pandas.to_datetime and choose the units for yourself together with the timezone. That avoids all the comments and problems mentioned in the previous answer:

import pandas as pd

pd.to_datetime(int(1331856000000), utc=True, unit=ms)
# Timestamp(2012-03-16 00:00:00+0000, tz=UTC)

How to convert integer timestamp to Python datetime

Leave a Reply

Your email address will not be published. Required fields are marked *