将元素列出时间格式并计算今天的时差

时间:2017-01-19 08:13:18

标签: python html datetime time format

我正在使用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

请帮我解决这个问题。

4 个答案:

答案 0 :(得分:5)

<RelativeLayout android:layout_width="match_parent" android:layout_height="match_parent"> <TextView android:id="@+id/label" android:layout_width="0dp" android:layout_height="wrap_content" android:layout_weight="1" android:textSize="12dip" android:layout_marginRight="10dp" android:layout_alignParentLeft="true" android:textColor="#ffffff" /> <TextView android:id="@+id/value" android:layout_width="0dp" android:layout_height="wrap_content" android:layout_weight="1" android:textSize="12dip" android:layout_alignParentRight="true" android:textColor="#ffffff" /> </RelativeLayout> 不是整数,它是带有整数的元组。您不能将其传递给date_cand_time对象。您必须将前3个元素作为单独的参数传递:

datetime.date()

(datetime.date.today() - datetime.date(*date_cand_time[:3])).days 告诉Python将*表达式的值应用为单独的参数。

但是,我不会绕道而行lst_reg_date_cand_time[:3];只需将3个字符串映射到整数并直接传递它们:

time.strptime()

date_cand = datetime.date(*map(int, date)) (datetime.date.today() - date_cand).days 的论据毕竟是datetime.date()yearmonth,与你的字符串顺序相同。

如果您必须使用day,请使用datetime.datetime.strptime()并从中提取strptime对象:

date

演示:

date_cand = datetime.datetime.strptime("-".join(date), "%Y-%m-%d")
(datetime.date.today() - date_cand.date()).days

答案 1 :(得分:4)

此代码似乎有效。请注意,我使用datetime.strptime代替time.strptime,以防万一(

from datetime import datetime


def parse_dates(dates_array):
    today = datetime.today()
    for date_array in dates_array:
        date = datetime.strptime('-'.join(date_array), '%Y-%m-%d')
        yield (today - date).days


if __name__ == '__main__':
    dates = [['2017', '01', '15'], ['2017', '01', '14'], ['2017', '01', '13']]
    for days_from_today in parse_dates(dates):
        print(days_from_today)

<强>输出

4
5
6

<强>买者

我在for循环之外移动today的计算以获得较小的性能优势,但如果您将此代码保留在午夜之后,这将导致代码中断。 :)

答案 2 :(得分:2)

这个Python 2 / Python 3代码是Martijn和Tagc的答案的组合。

from datetime import datetime

def parse_dates(dates_array):
    today = datetime.today()
    for d in dates_array:
        yield (today - datetime(*map(int, d))).days

if __name__ == '__main__':
    dates = [
        ['2017', '01', '15'], 
        ['2017', '01', '14'], 
        ['2017', '01', '13'],
    ]
    for d in parse_dates(dates):
        print(d)

<强>输出

4
5
6

正如Tagc所说,如果此代码运行时日期可能会发生变化,那么您需要在today = datetime.today()循环中移动for

这里基本上是相同的,没有功能:

from datetime import datetime

dates = [
    ['2017', '01', '15'], 
    ['2017', '01', '14'], 
    ['2017', '01', '13'],
]

today = datetime.today()

for d in dates:
    delta = (today - datetime(*map(int, d))).days
    print(delta)

答案 3 :(得分:1)

由于datetime.date在你的代码中用于增量计算,所以这是一种干净的方式来做你想要的。

import datetime 
dates = [['2017', '01', '15'], ['2017', '01', '14'], ['2017', '01', '13']]
today = datetime.date.today()
for date in dates:
    year,month,day = [int(s) for s in date] #convert to int and assign to vars : year, month, day
    date_cand_time = datetime.date(year,month,day) #convert date to datetime.date
    delta = (today - date_cand_time).days #calculate the day delta
    print delta

输出

4
5
6