Python从日期时间结果中获取总秒数偶尔会出现错误

标签 python python-3.x datetime python-datetime

我正在尝试关注 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/

相关文章:

Python:条形图 - 垂直标签 - 剪切

javascript - 如果系统时钟错误,Javascript的Date().getTime()会不正确吗?

python - datetime.time 的总和列表

c# - 具有相同格式的字符串未被识别为有效日期时间

python - 负整数除法令人惊讶的结果

Python在函数中复制列表

python - 创建 for 循环直到 list.length

python - 检查一个 Python 脚本是否使用另一个 Python 脚本进行编译

python-3.x - 使用 cv2 加载 png 时出错 - 结果数组为空

python - 使用反斜杠将字符串列表转换为正确的目录名称