0

我需要使用 for 循环查找表上日期/时间 TrackLogs 之间的时间差。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

我想我需要一个整数来进行 datetime 操作,但后来我遇到了以下异常:

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

我知道我做错了什么,但不知道是什么。任何帮助我表示赞赏。

4

1 回答 1

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()
于 2013-09-28T11:15:46.407 回答