如何在Python中以毫秒为单位创建日期时间?


142

我可以通过java.util.Date(milliseconds)在Java 创建类似的Date对象。如何在Python中创建可比对象?

分配一个Date对象,并将其初始化为表示自标准基准时间(即epoch)以来的指定毫秒数,即标准时间1970年1月1日,格林尼治标准时间00:00:00。

Answers:


215

只需将其转换为时间戳

datetime.datetime.fromtimestamp(ms/1000.0)

17
注意事项-在Python 3中,(/)将执行浮点除法。要执行整数除法,请使用(//)。
约翰·米利金

3
您是否真的要进行除法运算?否则,您将失去1秒以下的精度(保留在时间戳的小数部分)。最好使用无截断的ms / 1000.0。
布赖恩

4
当然datetime总是支持它吗?如果我们具有亚秒级的精度,则将其丢弃似乎是错误的。如果我们不这样做,就不会有任何伤害-我们只保留原始精度。
布赖恩

30
要保持精度而不使用浮点数,您还可以执行以下操作:datetime.utcfromtimestamp(ms//1000).replace(microsecond=ms%1000*1000)
tsg 2012年

2
此解决方案的另一个问题:“如果时间戳不在平台C localtime()或gmtime()函数支持的值范围内,那么fromtimestamp()可能会引发ValueError。通常将其限制为1970年至2038。” -您的代码需要持续多长时间???
麦克啮齿动物

12

那这个呢?我认为可以指望它处理1970年之前和2038年之后的日期。

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

如Python标准库中所述:

如果时间戳超出平台C localtime()或gmtime()函数支持的值范围,则fromtimestamp()可能会引发ValueError。通常将此限制在1970年到2038年之间。


6
您可以使用utc_time = datetime(1970, 1, 1) + timedelta(milliseconds=millis)
jfs 2015年

9

由于使用了熊猫而有点沉重,但可以:

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

By using our site, you acknowledge that you have read and understand our Cookie Policy and Privacy Policy.
Licensed under cc by-sa 3.0 with attribution required.