0

我读过很多关于解析时间有多不稳定的文章。我相信我已经想出了一种可靠的方法来转换 ISO8601 格式的时间戳:

https://gist.github.com/3702066

最重要的部分astimezone(LOCALZONE)是解析日期时的调用。这允许 time.mktime() 做正确的事情,并且似乎可以正确处理夏令时。

我错过了明显的陷阱吗?

4

1 回答 1

1

即使在夏令时转换之前或之后的时间段内,您的代码似乎也确实有效,但我担心在某个位置的时区偏移量实际发生变化的极少数情况下,它可能仍然会失败。我没有一个例子可以测试。

因此,即使确实有效(或几乎总是有效),我认为以任何方式涉及或通过本地时间的方式将 UTC 时间字符串转换为 UTC 时间戳也是疯狂的。本地时区应该无关紧要。这是一个不需要的依赖。我不是说疯了。您只是在尝试使用给定的 API,而 C 库的时间 API 设计得很糟糕。

mktime()幸运的是,Python 提供了 C 库应该提供的替代方案: calendar.timegm(). 有了这个函数,我可以像这样重写你的函数:

parsed = parse_date(timestamp)
timetuple = parsed.timetuple()
return calendar.timegm(timetuple)

因为不涉及本地时间,所以这也消除了对 pytz 的依赖以及令人讨厌的怀疑,即某人当地时区的模糊伪影会导致不良影响。

于 2012-09-11T22:32:26.700 回答