将 UTC 时间转换为纪元

Arn*_*tta 2 python datetime date

我希望分析与天气数据相关的交通流量。交通数据有一个 UNIX 时间戳(又名纪元),但我在将时间戳(在天气数据中)转换为纪元时遇到了麻烦。问题是我在挪威,天气数据中的 UTC 时间戳与我不在同一时区(GMT+1)。

我最初的做法

我首先尝试将其转换为纪元并将数据视为 GMT+1 时区。然后我通过减去 UTC 和 GMT+1 之间的秒数差异进行补偿。

方法的问题

我首先意识到这种方法非常原始而且不是很优雅(实际上它充其量只是一个丑陋的黑客)。然而,这里最大的问题是 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)
Run Code Online (Sandbox Code Playgroud)

不能正常工作,如下所示:

#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.
Run Code Online (Sandbox Code Playgroud)

Arn*_*tta 5

解决方案是使用日历模块(灵感来自此处

>>>#Quick and dirty demo
>>>print calendar.timegm(datetime.datetime.utcnow().utctimetuple()) - time.time()
>>>-0.6182510852813721
Run Code Online (Sandbox Code Playgroud)

这是转换函数:

import calendar, datetime, time

#Timestamp is a datetime object in UTC time
def UTC_time_to_epoch(timestamp):
  epoch = calendar.timegm(timestamp.utctimetuple())
  return epoch
Run Code Online (Sandbox Code Playgroud)