8

我有从 1970 年开始以毫秒为单位的时间戳。我想将其转换为 python 中人类可读的日期。如果涉及到这一点,我可能不会失去一些精确度。

我该怎么做?

以下给出ValueError: timestamp out of range for platform time_t on Linux 32bit

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

谢谢你,马克西姆。

4

3 回答 3

17

Python 需要秒,所以先将它除以 1000.0:

>>> print date.fromtimestamp(1241711346274/1000.0)
2009-05-07
于 2009-05-10T11:40:38.080 回答
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)
>>> 
于 2009-05-10T13:07:12.740 回答
1

以毫秒为单位将时间戳除以 1000 变为以秒为单位。

date.fromtimestamp(1241711346274/1000)
于 2009-05-10T11:40:00.373 回答