Python中的时间戳转换

1 投票
2 回答
1701 浏览
提问于 2025-04-17 17:25

在处理日志文件时,我需要比较时间戳和人类可读的时间格式。

epoc=time.strftime("%d.%m.%Y %H:%M - %Z", time.localtime(1358252743927))
print epoc

还有

t1=time.gmtime(1358252743927)
print t1

这两个都返回类似这样的内容:

26.04.45011 22:52 - CEST

而把1358252743927转换成时间,使用这个网站可以得到:

GMT: Tue, 15 Jan 2013 12:25:43 GMT
Your time zone: 1/15/2013 1:25:43 PM GMT+1

这是正确的时间,但不知怎么的,python处理不了这个时间戳。

有没有人知道怎么转换这个时间戳,才能得到后面的结果?

2 个回答

2

Python处理的时间是以秒为单位的,而根据你的时间戳的大小,我猜它实际上是以毫秒为单位的。

如果你把最后三位数字去掉,就能得到预期的时间:

>>> value = 1358252743927
>>> import time
>>> time.strftime("%d.%m.%Y %H:%M - %Z", time.localtime(value / 1000))
'15.01.2013 13:25 - CET'

(不过要注意,Python在处理时区问题时会有一些已知的麻烦)。

3

看起来你那里的时间戳包含了毫秒,而gmtime函数无法处理这个。你提到的网站可以处理这个。如果你把那个大数字最后的三位去掉,网站仍然会给你同样的结果,因为它不相信你真的想要公元45011年。

所以在传递这个数字之前,把它除以1000(如果你确定你总是会得到这么高的精度),这样就没问题了:

t1 = time.gmtime(1358252743.927)
print t1

结果是:

time.struct_time(tm_year=2013, tm_mon=1, tm_mday=15, tm_hour=12, tm_min=25, tm_sec=43, tm_wday=1, tm_yday=15, tm_isdst=0)

看起来没问题。

撰写回答