Python从datetime得到的总秒数会导致偶然的错误

时间:2018-04-01 02:10:01

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

我试图关注these answers并获取自1970年1月1日以来我阵列中每个元素(my_times)经过的秒数。然后,我使用这些值来查找每个连续时间之间的时间间隔。我采取的任何一种方法似乎都至少给出了一对错误的答案。

Mark Byers回答

为了获得自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)然后评估所有时间

1 个答案:

答案 0 :(得分:3)

这是“垃圾进,垃圾出”的情况。这里:

datetime.strptime("2017-11-05 01:59:00+00", "%Y-%m-%d %H:%M:%S+%f")

您可能认为末尾的+00表示“UTC时间”,但%f格式说明符的意思是“小数秒”。

在任何情况下,您显然都在一个系统上运行,在该系统中,时区设置为一年,部分时间为夏令时。上午2点在11月的DST转换日期发生了两次,因此您的代码按照书面形式工作(基本上是模棱两可的)。

换句话说:你的问题不是你计算错误的时间增量。您的问题是您正在从字符串中错误地(或模糊地)加载时间。