2015-09-01 57 views
5

我有一个带有unixtimestamp格式的日期时间的csv文件,其毫秒数和时区信息也以毫秒为单位。我想将其转换为更多可用的日期时间格式以供进一步处理。Python:如何将unixtimestamp和时区转换为datetime对象?

例如,时间是1437323953822,时区是-14400000

我可以用

datetime.datetime.fromtimestamp(1437323953822/1000) 

时间戳转换成日期时间但我怎么现在据我所知纳入其中是时区-4 UTC时间。

(-14400000/1000/60/60) = -4 

如何使用此时区获取实际时间?

+0

当你说实际时间你是什么意思?你在寻找UTC时间吗? –

+0

我想要当地的实际时间。 – sfactor

+0

你应该得到正确的实际时间吗?你是否得到UTC? –

回答

1

fromtimestamp也可以采取另一种参数的时区,的tzinfo一个子类:

classmethod datetime.fromtimestamp(timestamp[, tz])

返回本地日期和时间对应于POSIX时间戳,如 这样由time.time()返回。如果可选参数tz为 无或未指定,则时间戳将转换为本地日期和时间的平台的 ,并且返回的datetime对象是幼稚的。

其他tz必须是类tzinfo子类的实例,而 时间戳会转换为tz的时区。在这种情况下,结果是 相当于 tz.fromutc(datetime.utcfromtimestamp(timestamp).replace(tzinfo=tz)).

0

fromtimestamp()已经返回本地时间,即,你不需要附加UTC偏移,如果fromtimestamp()决定了它自动正确:

#!/usr/bin/env python 
from datetime import datetime 

local_time = datetime.fromtimestamp(1437323953822 * 1e-3) 
# -> datetime.datetime(2015, 7, 19, 12, 39, 13, 822000) 

fromtimestamp()在某些情况下可能会失败,例如,如果本地时区在过去有不同的utc偏移量,并且fromtimestamp()未在给定平台(特别是Windows)上使用历史时区数据库。在这种情况下,从UTC时间构建本地时间明确和给定的UTC偏移:

#!/usr/bin/env python 
from datetime import datetime, timedelta 

utc_time = datetime(1970, 1, 1) + timedelta(milliseconds=1437323953822) 
utc_offset = timedelta(milliseconds=-14400000) 
local_time = utc_time + utc_offset 
# -> datetime.datetime(2015, 7, 19, 12, 39, 13, 822000) 

Python always expects POSIX Epoch,因此它是确定硬编码。明确的公式可能更精确(无舍入误差),它可以接受更大范围的输入时间戳(范围取决于平台,可能比相应的范围窄)。

相关问题