我正在使用python 3.6并且计算日期时遇到了一些问题.
我有一个由日期元素组成的列表,如下所示:
dates = [['2017','01','15'], ['2017','01','14'], ['2017','01','13'],...]
我想按时间格式计算并计算今天的日期.
我该如何修复我的代码?
以下是我的代码:
dates = [['2017', '01', '15'], ['2017', '01', '14'], ['2017', '01', '13']] for date in dates: date_cand = "-".join(date) date_cand_time = time.strptime(date_cand,"%Y-%m-%d") (datetime.date.today() - datetime.date(date_cand_time)).days
我现在有这个错误消息:
TypeError: an integer is required (got type time.struct_time)
我希望得到的结果是:
4 5 6
请帮我解决这个问题.
date_cand_time
不是整数,它是一个带整数的元组.你不能只是将它传递给datetime.date()
对象.您必须将前3个元素作为单独的参数传递:
(datetime.date.today() - datetime.date(*date_cand_time[:3])).days
的*
讲述的Python应用的值lst_reg_date_cand_time[:3]
表达为单独的参数.
但是,我不会绕道而行time.strptime()
; 只需将3个字符串映射到整数并直接传递它们:
date_cand = datetime.date(*map(int, date)) (datetime.date.today() - date_cand).days
该参数datetime.date()
是,毕竟year
,month
并且day
,以相同的顺序你有你的字符串.
如果必须使用strptime
,则使用datetime.datetime.strptime()
并从中提取date
对象:
date_cand = datetime.datetime.strptime("-".join(date), "%Y-%m-%d") (datetime.date.today() - date_cand.date()).days
演示:
>>> import datetime >>> dates = [['2017','01','15'], ['2017','01','14'], ['2017','01','13']] >>> for date in dates: ... # using map, produces a date ... date_cand = datetime.date(*map(int, date)) ... print(date_cand, (datetime.date.today() - date_cand).days) ... # using datetime.datetime.strptime, produces a datetime ... date_cand = datetime.datetime.strptime("-".join(date), "%Y-%m-%d") ... print(date_cand, (datetime.date.today() - date_cand.date()).days) ... 2017-01-15 4 2017-01-15 00:00:00 4 2017-01-14 5 2017-01-14 00:00:00 5 2017-01-13 6 2017-01-13 00:00:00 6