Python:迭代日志之间的时差

时间:2013-09-28 10:43:02

标签: python datetime time

我需要使用for循环在表上找到日期/时间TrackLog之间的时差。 trackLog条目的格式如下:

2013-08-02T14:30:10Z

我需要考虑到'for'循环在尝试计算第一个timediff时失败。因为第一个日志没有前面的条目来执行计算。因此,我需要包含一个'if'语句(带有布尔值),以允许脚本在找到第一个日志时运行。

这是我到目前为止所得到的:

for row in cur:
    period=row.tracklogs
    year=period[0:4]
    month=period[6:7]
    day=period[8:10]
    hour=period[11:13]
    minut=period[14:16]
    second=period[17:19]
    print period
    firstline="yes"
    if firstline=="yes":
        prev_period=row.tracklogs
        prev_coord=row.shape
        firstline="no"
    else:
        new_period=row.tracklogs
        new_coord=row.shape
        period1=datetime.datetime(int(prev_period))
        period2=datetime.datetime(int(new_period))
        timediff=(a2-a1).seconds
        print timediff

我认为我需要一个整数来进行日期时间操作,但后来我遇到了以下异常:

 line 36, in <module>
    tid1=datetime.datetime(int(tidl_tid))
ValueError: invalid literal for int() with base 10: '2009-05-19T11:51:47Z'

我知道我做错了什么但不知道它是什么。任何帮助我都赞赏。

1 个答案:

答案 0 :(得分:1)

您正在尝试将字符串2009-05-19T11:51:47Z转换为整数,其中字符串不是正确的基数10。所以python正在抛出错误

您需要解析日期字符串并获取必要的日期时间对象。

假设

date_string = "2009-05-19T11:51:47Z"

要么

from dateutil import parser
d1 = parser.parse(date_string)

from datetime import datetime
d1 = datetime.strptime(date_string, "%Y-%m-%dT%H:%M:%SZ")

并使用下一个命令获取两个日期d1和d2之间的差异,以秒为单位

(d1-d2).total_seconds()