我正在使用 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() 的参数是 yearmonthday ,与字符串的顺序相同。

如果必须使用 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/

10-12 12:53
查看更多