【发布时间】:2014-06-04 02:04:33
【问题描述】:
我希望分析与天气数据相关的交通流量。交通数据有一个 UNIX 时间戳(又名纪元),但我在将时间戳(在天气数据中) 转换为纪元时遇到了麻烦。问题是我在挪威,天气数据中的 UTC 时间戳与我不在同一个时区 (GMT+1)。
我的初步做法
我首先尝试将其转换为纪元并将数据视为 GMT+1 时区。然后我通过减去 UTC 和 GMT+1 之间的秒数差来补偿。
方法的问题
我首先意识到这种方法非常原始而且不是很优雅(事实上,它可能充其量只是一个丑陋的hack)。然而,这里最大的问题是 UTC 和 GMT+1 之间的差异不是恒定的(由于夏令时)。
问题
是否有任何可靠方法可以将 UTC 时间转换为 python 中的 UNIX 时间戳(考虑到我的机器处于 GMT+1 状态)?时间戳格式如下:
Y-m-d HH:MM:SS
编辑: 试过 rmunns 的解决方案:
def convert_UTC_to_epoch(timestamp):
tz_UTC = pytz.timezone('UTC')
time_format = "%Y-%m-%d %H:%M:%S"
naive_timestamp = datetime.datetime.strptime(timestamp, time_format)
aware_timestamp = tz_UTC.localize(naive_timestamp)
epoch = aware_timestamp.strftime("%s")
return (int) (epoch)
这不能正常工作,如下所示:
#Current time at time of the edit is 15:55:00 UTC on June 9th 2014.
>>> diff = time.time() - convert_UTC_to_epoch("2014-06-09 15:55:00")
>>> diff
3663.25887799263
>>> #This is about an hour off.
【问题讨论】:
-
我不明白你的第一段。您说流量数据采用“UNIX 时间戳(又名纪元)”格式,但您正试图将其转换为纪元,它已经采用的格式?请澄清。我将使用我对您的意思的最佳猜测来回答您的问题,但对输入格式和输出格式进行更多解释会有所帮助。
-
@rmunn 这是一个小错字。流量数据采用纪元格式。天气数据采用字符串格式 Y-m-d HH:MM:SS (UTC)。
-
我已经更新了我的答案,以说明您遇到问题的原因以及正确的解决方案。 (有两种正确的解决方案,取决于你是否需要关心毫秒。)
-
更新:对不起,我以前的 cmets 错了。问题不是你使用
time.time(),问题是你使用strftime("%s")。 NEVER usestrftime("%s"):“它不受支持,它不可移植,它可能会默默地为感知的日期时间对象产生错误的结果,如果输入是 UTC(如问题所示)但本地时区不是 UTC,它会失败”。