286

I have a data file containing timestamps like "1331856000000". Unfortunately, I don't have a lot of documentation for the format, so I'm not sure how the timestamp is formatted. I've tried Python's standard datetime.fromordinal() and datetime.fromtimestamp() and a few others, but nothing matches. I'm pretty sure that particular number corresponds to the current date (e.g. 2012-3-16), but not much more.

How do I convert this number to a datetime?

4 Answers 4

522

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: jfs correctly suggested in a now-deleted comment 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 method's result also contains information about that fractional part (as the number of microseconds).

Sign up to request clarification or add additional context in comments.

3 Comments

This function is dangerous, because takes you timezone into consideration. Try looking up utcfromtimestamp
@HaimBender Thanks! I feel like your comments deserve more attentions. fromtimestamp give you the date and time in local time utcfromtimestamp gives you the date and time in UTC.
@yusong When running Python 3.12, you'll see: DeprecationWarning: datetime.datetime.utcfromtimestamp() is deprecated and scheduled for removal in a future version. Use timezone-aware objects to represent datetimes in UTC: datetime.datetime.fromtimestamp(timestamp, datetime.UTC)
18

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')

1 Comment

Yes. pd.to_datetime is a really good method of pandas class. Even it allows you to specify the units and the timezone, which can be really helpful to determine the format of the timestamp. For example, whether it is a second, microsecond, or nanoseconds. The format which can be used in the unit parameters is (D, s, ms, us, ns).
5

Similar to @Tadek answer

If the timestamps are in UTC timezone (a common way to store dates) you should use

datetime.datetime.utcfromtimestamp()

If you use fromtimestamp it will assume the date is represented in your local timezone

1 Comment

This results in a naive datetime object which may later get interpreted as being in local time and not UTC. The docs recommend using datetime.fromtimestamp(timestamp, tz=timezone.utc).
0

To convert integer seconds into string date and time this could be used:

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

Output: '19:01:2392,00:00:00'

Comments

Your Answer

By clicking “Post Your Answer”, you agree to our terms of service and acknowledge you have read our privacy policy.

Start asking to get answers

Find the answer to your question by asking.

Ask question

Explore related questions

See similar questions with these tags.