[英]Optimizing datetime.date to unix timestamp conversion in python
我一直在努力尽可能快地做到这一点,同时也避免了时区问题。
这种方法似乎是最慢的:
def to_unix_timestamp(stamp):
return int(stamp.strftime('%s'))
它产生以下结果:
ncalls tottime percall cumtime percall filename:lineno(function)
4328301 1.620 0.000 10.009 0.000 utils.py:13(to_unix_timestamp)
这似乎好一点,但仍然相对较慢:
def to_unix_timestamp(stamp):
return time.mktime(stamp.timetuple())
结果:
ncalls tottime percall cumtime percall filename:lineno(function)
4328301 1.381 0.000 8.158 0.000 utils.py:13(to_unix_timestamp)
有什么方法可以在不搞砸时区的情况下实现重大加速? 请注意,我仅限于 python 2.7。
定义
d0 = datetime.date(1970, 1, 1)
,然后执行(stamp - d0).total_seconds()
? … – 杰森哈珀我遇到了我担心的“时区”问题。 在针对其他方法进行验证后,我发现来自此方法的时间向前偏移了一个小时。 知道是什么原因造成的吗?
是的,其他方法隐含地使用本地时间,考虑到您的时区。 datetime.date
对象d0
(具有 1 天分辨率)不携带该时区信息,因此在采用差异stamp - d0
时存在差异。 为了纠正这个问题,我们可以构建一个代表真实纪元的d0
:
d0 = datetime.datetime.fromtimestamp(0)
这样, (datetime.datetime.combine(stamp, datetime.time.min) - d0).total_seconds()
产生您期望的值。
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.