strptime python




قائمة العناصر إلى تنسيق الوقت وحساب الوقت فرق من اليوم (3)

أنا باستخدام الثعبان 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

الرجاء مساعدتي في العمل على ذلك.


هذا بيثون 2 / بيثون 3 رمز هو مزيج من مارتين و تاجك الأجوبة.

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

كما قال تاجك، إذا كان التاريخ قد تتغير أثناء تشغيل هذا الرمز ثم تحتاج إلى نقل today = datetime.today() داخل حلقة.

وهنا أساسا نفس الشيء، من دون وظيفة:

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)

يبدو أن هذا الرمز للعمل. لاحظ أن يمكنني استخدام 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

مذكرة قانونية

أحرك حساب today خارج حلقة للحصول على فوائد أداء ثانوية، ولكن هذا سوف يؤدي إلى كسر التعليمات البرمجية إذا تركت هذا الرمز تشغيل الماضي منتصف الليل. :)


منذ 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




format