我需要使用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'
我知道我做错了什么但不知道它是什么。任何帮助我都赞赏。
答案 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()