繁体   English   中英

在python中优化datetime.date到unix时间戳转换

[英]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.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM