python - 使用Python计算时差

标签 python date time gps difference

<分区>

我想知道是否有一种方法或内置库可以找到两个字符串输入的时间差异。

我的意思是,如果我有 2 个输入字符串:

  1. '2013-10-05T01:21:07Z'
  2. '2013-10-05T01:21:16Z'

如何计算时间差并将其打印为输出。

我知道这听起来有点傻,但我们很感激任何帮助。

最佳答案

使用 strptime() 解析您的字符串:

a = time.strptime('2013-10-05T01:21:07Z', '%Y-%m-%dT%H:%M:%SZ')
b = time.strptime('2013-10-05T01:21:16Z', '%Y-%m-%dT%H:%M:%SZ')

这会将给定的时间字符串解析为本地时间(将夏令时 (DST) 设置为自动),结果是时间结构。这些仍然反射(reflect) DST 是明确关闭 (0)、开启 (1) 还是隐式自动 (-1)。将这些转换为 float (自 1970-01-01 以来的秒数):

a = time.mktime(a)
b = time.mktime(b)

然后计算差异(以秒为单位):

d = b - a

并将它们转换为天/小时/分钟/秒:

days = int(d) / 86400
hours = int(d) / 3600 % 24
minutes = int(d) / 60 % 60
seconds = int(d) % 60

最后一个 block 只适用于正差异,所以注意不要交换 ab ;-)

但是@J.F.Sebastian 正确地指出这可能不是您想要的。从符号看来,您的字符串描述的是 UTC 时间,而不是本地时间。对于纯粹的时间差异,如果您的时间跨度超过 DST 开关,则这是相关的。在这种情况下,它当然会导致时差过大一小时或过小一小时(因为 UTC 始终没有 DST)。

为避免这种情况,您可以将 DST 标志从自动 (-1) 设置为固定值(例如 0 表示关闭)并使用这些值:

a = time.mktime(a[:-1] + (0,))  # switch DST to off
b = time.mktime(b[:-1] + (0,))

或者,正如@J.F.Sebastian 指出的那样,您可以忘记 time 模块,而是使用不知道 DST 方面的 datetime.datetime:

a = datetime.datetime.strptime('2013-10-05T01:21:07Z', '%Y-%m-%dT%H:%M:%SZ')
b = datetime.datetime.strptime('2013-10-05T01:21:16Z', '%Y-%m-%dT%H:%M:%SZ')

然后结果是datetime对象,可以直接减去得到一个timedelta对象,它表示你想要的时间差。打印它会导致类似 0:00:05 的结果,这很可能正是您要查找的内容。

关于python - 使用Python计算时差,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/23885390/

相关文章:

python - 用散点图叠加直方图的列

python - Django 管理员身份验证失败

c++ - 将 time_duration 转换为 DATE

java - Java 世界中的一毫秒有多长?

python - 如何在 MySQLDB API for Python 中使用 num_rows() 函数?

swift - 在 Swift 中获取今天和给定日期之间的日期数组?

java - 有没有办法根据美国格式字符串获取本地化日期/时间?

java - 为什么 UTC 时区提前了 Java 中的 System.currentTimeMillis 时间?

time - Google SpreadSheet - 处理 MM :SS. sss 时间格式

python - 在 Python 字典中找不到键时会引发什么异常?