2016-02-29 75 views
0

我想比较从csv文件中提取的日期到当前日期,以检查差异是否大于七天。这里是我的代码:在Python中比较日期不按预期工作

with open (path) as csvfile: 
    readcsv = csv.reader(csvfile, delimiter = ',') 
    for row in readcsv: 
     iso_ts = str(row[3]) 
     datum = (datetime.datetime.strptime(''.join(iso_ts.rsplit(':', 1)), '%Y-%m-%dT%H:%M:%S%z')) 

    current_time = (datetime.datetime.strptime(datetime.datetime.now(),'%Y-%m-%dT%H:%M:%S%z')) 

甚至没有比较这些我收到以下错误

File "./netapp.py", line 32, in <module> 
    current_time = (datetime.datetime.strptime(datetime.datetime.now(),'%Y-%m-%dT%H:%M:%S%z')) 
TypeError: must be str, not datetime.datetime 

我想检查一下,如果从CSV传来的数据是7天以上,以当前日期然后做点什么。我知道这些日期中的任何一个的格式都存在一些问题,但我似乎无法弄清楚它究竟是什么。我将非常感谢关于我失踪的解释。

回答

1

datetime.strptime()需要date_stringformat字符串并将日期字符串参数转换为datetime对象。我不认为你需要转换任何东西,你应该能够使用timedelta对象比较datumdatetime.datetime.now()

当心,.now()返回一个表示本地时间的天真datetime对象。当地时间可能不明确 - 不要将其用于比较。我在格式字符串中看到%z(utc偏移量); .strptime() returns a timezone-aware datetime object on Python 3。你不能比较天真和意识的日期时间对象。使用.now(timezone.utc)创建可用于比较的时区感知当前时间。请参阅Find if 24 hrs have passed between datetimes - Python

+0

谢谢,现在工作 – scriptkiddie

+1

@scriptkiddie:beware,'.now()'返回一个天真的日期时间对象,表示当地时间。当地时间可能不明确 - 不要将其用于比较。我在格式字符串中看到'%z'(utc偏移量); ['.strptime()'在Python 3上返回一个可识别时区的日期时间对象](http://stackoverflow.com/q/12281975/4279)。你不能比较天真和意识的日期时间对象。使用'.now(timezone.utc)'创建一个可用于比较的时区感知当前时间。看[如果24小时之间已经通过日期时间之间传递 - Python](http://stackoverflow.com/q/26313520/4279) – jfs

+0

@ J.F.Sebastian你介意,如果我把它作为一个编辑在我的答案?我认为这是一个很好的陷阱。 – wpercy

0

您的格式字符串错误。 试试这个:current_time = datetime.datetime.today().strftime("%Y-%b-%dT%H:%M:%S")

+0

我不知道你可以直接在'datetime'对象上调用'strftime()' - 非常酷 – wpercy

+1

生成一个字符串是找出自给定时间戳以来是否超过一个星期的错误方法。您应该做相反的事情:将时间戳解析为日期/时间对象并找出差异。 – jfs