我正在使用 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
关于python - 以时间格式列出元素并计算从今天开始的时间差异,我们在Stack Overflow上找到一个类似的问题:https://stackoverflow.com/questions/41736855/