Reputation: 64709
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
?
Upvotes: 281
Views: 504896
Reputation: 1
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'
Upvotes: 0
Reputation: 137300
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).
Upvotes: 511
Reputation: 17498
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
Upvotes: 5
Reputation: 2508
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')
Upvotes: 17