我试图关注these answers并获取自1970年1月1日以来我阵列中每个元素(my_times
)经过的秒数。然后,我使用这些值来查找每个连续时间之间的时间间隔。我采取的任何一种方法似乎都至少给出了一对错误的答案。
为了获得自1970年1月1日以来的秒数,他建议尝试:
time.mktime(my_time.timetuple())
但是,这似乎不适用于"2017-11-05 01:46:00+00"
和"2017-11-05 01:47:00+00"
。
当我运行以下代码时,它表示值相隔3660.0秒而不是60.0秒
from datetime import datetime
import time
my_time1 = datetime.strptime("2017-11-05 01:46:00+00", "%Y-%m-%d %H:%M:%S+%f")
my_time2 = datetime.strptime("2017-11-05 01:47:00+00", "%Y-%m-%d %H:%M:%S+%f")
time.mktime(my_time2.timetuple()) - time.mktime(my_time1.timetuple())
为了获得自1970年1月1日以来的秒数,他建议尝试:
my_time.timestamp()
这更早修复了两次,但它不再适用于"2017-11-05 01:59:00+00"
和"2017-11-05 02:00:00+00"
次。出现同样的问题,我得到3660.0秒而不是60.0秒
from datetime import datetime
my_time1 = datetime.strptime("2017-11-05 01:59:00+00", "%Y-%m-%d %H:%M:%S+%f")
my_time2 = datetime.strptime("2017-11-05 02:00:00+00", "%Y-%m-%d %H:%M:%S+%f")
my_time2.timestamp() - my_time1.timestamp()
我想知道我做错了什么?当日期时间以字符串形式给出时,还有更好的方法来查找所有连续的时间间隔吗?
谢谢约翰,解决了这个问题。奇怪的是,将格式从+%f
更改为%z
仍然遇到了同样的问题。
正在运行的工作sudo ln -sf /usr/share/zoneinfo/UTC /etc/localtime
(将我的计算机的时间更改为UTC)然后评估所有时间
答案 0 :(得分:3)
这是“垃圾进,垃圾出”的情况。这里:
datetime.strptime("2017-11-05 01:59:00+00", "%Y-%m-%d %H:%M:%S+%f")
您可能认为末尾的+00
表示“UTC时间”,但%f格式说明符的意思是“小数秒”。
在任何情况下,您显然都在一个系统上运行,在该系统中,时区设置为一年,部分时间为夏令时。上午2点在11月的DST转换日期发生了两次,因此您的代码按照书面形式工作(基本上是模棱两可的)。
换句话说:你的问题不是你计算错误的时间增量。您的问题是您正在从字符串中错误地(或模糊地)加载时间。