作为功能的一部分,我以 "[YYYY]-[MM]-[DD]T[HH]:[MM]:[SS]+[XXXX]"
格式输入日期和时间加上时区(XXXX与HHMM中的UTC不同)并需要日期和时间作为Unix时间戳。
我目前正在使用time.mktime([CONVERTED TIME])
,但最终会使用TypeError: function takes exactly 9 arguments (6 given)
。对time.mktime
的“工作日”等论点进行编程似乎需要付出很多努力,所以我确信还有一种更好的方法,我还没有找到。
如何做到这一点?
答案 0 :(得分:1)
这是符合ISO 8601标准的时间戳。有各种各样的图书馆可以帮助这些。但是你的情况是,对于固定格式,你可以使用Python dt.datetime.strptime
和datetime.timedelta
来计算自纪元以来的秒数:
def epoch_seconds_from_iso_8601_with_tz_offset(iso_8601):
""" Convert ISO 8601 with a timezone offset to unix timestamp """
iso_8601_dt = dt.datetime.strptime(iso_8601[:-5], '%Y-%m-%dT%H:%M:%S')
utc_at_epoch = dt.datetime(1970, 1, 1)
epoch_without_tz_offset = (iso_8601_dt - utc_at_epoch).total_seconds()
tz_offset = 60 * (60 * int(iso_8601[-4:-2]) + int(iso_8601[-2:]))
if iso_8601[-5] == '-':
tz_offset = -tz_offset
return epoch_without_tz_offset - tz_offset
import datetime as dt
t1 = epoch_seconds_from_iso_8601_with_tz_offset('2018-01-07T19:43:15+0000')
t2 = epoch_seconds_from_iso_8601_with_tz_offset('2018-01-07T11:43:15-0800')
epoch = 1515354195
assert epoch == t1 == t2