从“[YYYY]-[MM]-[DD]T[HH]:[MM]:[SS]+[XXXX]”转换为 unix 时间戳
Convert to unix timestamp from "[YYYY]-[MM]-[DD]T[HH]:[MM]:[SS]+[XXXX]"
作为函数的一部分,我以 "[YYYY]-[MM]-[DD]T[HH]:[MM]:[SS]+[XXXX]"
的格式获取日期和时间以及时区的输入(XXXX 是 HHMM 中与 UTC 的差异) 并且需要日期和时间作为 Unix 时间戳。
我目前正在使用 time.mktime([CONVERTED TIME])
,但最终使用的是 TypeError: function takes exactly 9 arguments (6 given)
。为 'weekday' 等的参数编写一些东西似乎需要付出很多努力。 time.mktime
,所以我确信有更好的方法,但我还没有找到。
还能如何做到这一点?
这是一个 ISO 8601 compliant timestamp. There are various libraries which can help with these. But is your case, for a fixed format, you can use Python's dt.datetime.strptime
and 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
作为函数的一部分,我以 "[YYYY]-[MM]-[DD]T[HH]:[MM]:[SS]+[XXXX]"
的格式获取日期和时间以及时区的输入(XXXX 是 HHMM 中与 UTC 的差异) 并且需要日期和时间作为 Unix 时间戳。
我目前正在使用 time.mktime([CONVERTED TIME])
,但最终使用的是 TypeError: function takes exactly 9 arguments (6 given)
。为 'weekday' 等的参数编写一些东西似乎需要付出很多努力。 time.mktime
,所以我确信有更好的方法,但我还没有找到。
还能如何做到这一点?
这是一个 ISO 8601 compliant timestamp. There are various libraries which can help with these. But is your case, for a fixed format, you can use Python's dt.datetime.strptime
and 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