将Java中的System.currentTimeMillis()转换为Python日期

9 投票
3 回答
12953 浏览
提问于 2025-04-15 11:29

我有一个从1970年开始的时间戳,单位是毫秒。我想把它转换成人类能看懂的日期格式,用Python来做。如果在这个过程中失去一些精度我也不在乎。

我该怎么做呢?

在Linux 32位系统上,下面的代码会出现ValueError: timestamp out of range for platform time_t的错误。

#!/usr/bin/env python
from datetime import date
print date.fromtimestamp(1241711346274)

谢谢,

Maxim。

3 个回答

1

这是把时间戳除以1000,得到的结果是以秒为单位的,单位是毫秒。

date.fromtimestamp(1241711346274/1000)
4

你可以保持精度,因为在Python中,时间戳是一个浮点数。下面是一个例子:

import datetime

java_timestamp = 1241959948938
seconds = java_timestamp / 1000
sub_seconds  = (java_timestamp % 1000.0) / 1000.0
date = datetime.datetime.fromtimestamp(seconds + sub_seconds)

当然,你可以把它写得更简洁一些,但上面的代码适合在REPL中逐行输入,看看它的效果。例如:

Python 2.5.2 (r252:60911, Feb 22 2008, 07:57:53) 
[GCC 4.0.1 (Apple Computer, Inc. build 5363)] on darwin
Type "help", "copyright", "credits" or "license" for more information.
>>> java_timestamp = 1241959948938
>>> import datetime
>>> seconds = java_timestamp / 1000
>>> seconds
1241959948L
>>> sub_seconds  = (java_timestamp % 1000.0) / 1000.0
>>> sub_seconds
0.93799999999999994
>>> date = datetime.datetime.fromtimestamp(seconds + sub_seconds)
>>> date
datetime.datetime(2009, 5, 10, 8, 52, 28, 938000)
>>> 
18

Python 这个语言需要的是秒,所以你要先把它除以 1000.0:

>>> print date.fromtimestamp(1241711346274/1000.0)
2009-05-07

撰写回答