The Python Oracle

How do I create a datetime in Python from milliseconds?

Become part of the top 3% of the developers by applying to Toptal https://topt.al/25cXVn

--

Music by Eric Matyas
https://www.soundimage.org
Track title: Future Grid Looping

--

Chapters
00:00 Question
00:35 Accepted answer (Score 350)
00:49 Answer 2 (Score 19)
01:04 Answer 3 (Score 18)
01:56 Answer 4 (Score 16)
02:06 Thank you

--

Full question
https://stackoverflow.com/questions/7484...

Question links:
[java.util.Date(milliseconds)]: https://docs.oracle.com/javase/8/docs/ap...

--

Content licensed under CC BY-SA
https://meta.stackexchange.com/help/lice...

--

Tags
#python #datetime

#avk47



ACCEPTED ANSWER

Score 384


Just convert it to timestamp

datetime.datetime.fromtimestamp(ms/1000.0)



ANSWER 2

Score 20


What about this? I presume it can be counted on to handle dates before 1970 and after 2038.

target_datetime_ms = 200000 # or whatever
base_datetime = datetime.datetime(1970, 1, 1)
delta = datetime.timedelta(0, 0, 0, target_datetime_ms)
target_datetime = base_datetime + delta

as mentioned in the Python standard lib:

fromtimestamp() may raise ValueError, if the timestamp is out of the range of values supported by the platform C localtime() or gmtime() functions. It’s common for this to be restricted to years in 1970 through 2038.

Very obviously, this can be done in one line:

target_dt = datetime(1970, 1, 1) + timedelta(milliseconds=target_dt_ms)

... not only was this obvious from my answer, but the 2015 comment by jfs is also highly misleading, because it calls the variable utc_time.

Er no: it's not "time", it's datetime, and it's most definitely NOT UTC. The datetime with which we're concerned here is a "timezone-naive" datetime, as opposed to a timezone-aware datetime. Therefore definitely NOT UTC.

Search on this if you're not familiar with the issue.




ANSWER 3

Score 17


import pandas as pd

Date_Time = pd.to_datetime(df.NameOfColumn, unit='ms')



ANSWER 4

Score 13


Bit heavy because of using pandas but works:

import pandas as pd
pd.to_datetime(msec_from_java, unit='ms').to_pydatetime()