我正在尝试关注 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())
Andrzej Pronobis 的回答
要获取自 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),然后评估所有时间
最佳答案
这是一个“垃圾进,垃圾出”的情况。这里:
datetime.strptime("2017-11-05 01:59:00+00", "%Y-%m-%d %H:%M:%S+%f")
您可能认为末尾的 +00
表示“UTC 时间”,但 %f 格式说明符表示“小数秒”。
无论如何,您运行的系统显然时区设置为一年中部分时间的夏令时。 11 月的 DST 转换日期凌晨 2 点发生了两次,因此您的代码按照编写的方式工作(基本上是不明确的)。
换句话说:您的问题不是您错误地计算了时间增量。您的问题是您从字符串加载时间不正确(或含糊不清)。
关于Python从日期时间结果中获取总秒数偶尔会出现错误,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/49594155/