Ввод даты и времени с клавы

Задача "На ввод вам дан файл состоящий из пар временных отметок, для каждой последовательной пары отметок вам нужно подсчитать абсолютную разницу во времени в секундах"

Вводные данные (берутся из .txt):

Sun 10 May 2021 13:54:36 -0700
Sun 10 May 2021 13:54:36 -0000
Sat 02 May 2021 19:54:36 +0530
Fri 01 May 2021 13:54:36 -0000

Не могу понять как сделать ввод конкретно этой даты


Ответы (1 шт):

Автор решения: Namerek

Если не охота заморачиваться с маской для strptime то можно так.

from dateutil.parser import parse

text = 'Sun 10 May 2021 13:54:36 -0700'

print(parse(text))
# 2021-05-10 13:54:36-07:00
print(repr(parse(text)))
# datetime.datetime(2021, 5, 10, 13, 54, 36, tzinfo=tzoffset(None, -25200)

Но если прям очень захочется то:

from datetime import datetime

text = 'Sun 10 May 2021 13:54:36 -0700'

pattern = '%a %d %b %Y %X %z'

print(datetime.strptime(text, pattern))
print(repr(datetime.strptime(text, pattern)))

#2021-05-10 13:54:36-07:00
#datetime.datetime(2021, 5, 10, 13, 54, 36, tzinfo=datetime.timezone(datetime.timedelta(days=-1, seconds=61200)))
# UPD
from datetime import datetime

pattern = '%a %d %b %Y %X %z'

with open('data.txt', 'r', encoding='utf-8') as file:
    for line in file.readlines():
        print(datetime.strptime(line.strip(), pattern))
#2021-05-10 13:54:36-07:00
#2021-05-10 13:54:36+00:00
#2021-05-02 19:54:36+05:30
#2021-05-01 13:54:36+00:0
from datetime import datetime

pattern = '%a %d %b %Y %X %z'

with open('data.txt', 'r', encoding='utf-8') as file:
    dates = [
        *map(
            lambda x: datetime.strptime(x.strip(), pattern),
            filter(lambda x: bool(x.strip()), file.readlines())
        )
    ]

for f, s in zip(dates[::2], dates[1::2]):
    print(abs(int(f.timestamp() - s.timestamp())))

Datetime parsing patterns

Directive Meaning Example Notes
%a Weekday as locale’s abbreviated name. Sun, Mon, …, Sat (en_US); So, Mo, …, Sa (de_DE) (1)
%A Weekday as locale’s full name. Sunday, Monday, …, Saturday (en_US); Sonntag, Montag, …, Samstag (de_DE) (1)
%w Weekday as a decimal number, where 0 is Sunday and 6 is Saturday. 0, 1, …, 6
%d Day of the month as a zero-padded decimal number. 01, 02, …, 31 (9)
%b Month as locale’s abbreviated name. Jan, Feb, …, Dec (en_US); Jan, Feb, …, Dez (de_DE) (1)
%B Month as locale’s full name. January, February, …, December (en_US); Januar, Februar, …, Dezember (de_DE) (1)
%m Month as a zero-padded decimal number. 01, 02, …, 12 (9)
%y Year without century as a zero-padded decimal number. 00, 01, …, 99 (9)
%Y Year with century as a decimal number. 0001, 0002, …, 2013, 2014, …, 9998, 9999 (2)
%H Hour (24-hour clock) as a zero-padded decimal number. 00, 01, …, 23 (9)
%I Hour (12-hour clock) as a zero-padded decimal number. 01, 02, …, 12 (9)
%p Locale’s equivalent of either AM or PM. AM, PM (en_US); am, pm (de_DE) (1), (3)
%M Minute as a zero-padded decimal number. 00, 01, …, 59 (9)
%S Second as a zero-padded decimal number. 00, 01, …, 59 (4), (9)
%f Microsecond as a decimal number, zero-padded on the left. 000000, 000001, …, 999999 (5)
%z UTC offset in the form ±HHMM[SS[.ffffff]] (empty string if the object is naive). (empty), +0000, -0400, +1030, +063415, -030712.345216 (6)
%Z Time zone name (empty string if the object is naive). (empty), UTC, GMT (6)
%j Day of the year as a zero-padded decimal number. 001, 002, …, 366 (9)
%U Week number of the year (Sunday as the first day of the week) as a zero padded decimal number. All days in a new year preceding the first Sunday are considered to be in week 0. 00, 01, …, 53 (7), (9)
%W Week number of the year (Monday as the first day of the week) as a decimal number. All days in a new year preceding the first Monday are considered to be in week 0. 00, 01, …, 53 (7), (9)
%c Locale’s appropriate date and time representation. Tue Aug 16 21:30:00 1988 (en_US); Di 16 Aug 21:30:00 1988 (de_DE) (1)
%x Locale’s appropriate date representation. 08/16/88 (None); 08/16/1988 (en_US); 16.08.1988 (de_DE) (1)
%X Locale’s appropriate time representation. 21:30:00 (en_US); 21:30:00 (de_DE) (1)
%% A literal '%' character. %

Several additional directives not required by the C89 standard are included for convenience. These parameters all correspond to ISO 8601 date values.

Directive Meaning Example Notes
%G ISO 8601 year with century representing the year that contains the greater part of the ISO week (%V). 0001, 0002, …, 2013, 2014, …, 9998, 9999 (8)
%g ISO 8601 year without century as a zero-padded decimal number representing the year that contains the greater part of the ISO week (%V). 01, 02, ..., 13, 14, ..., 98, 99
%u ISO 8601 weekday as a decimal number where 1 is Monday. 1, 2, …, 7
%V ISO 8601 week as a decimal number with Monday as the first day of the week. Week 01 is the week containing Jan 4. 01, 02, …, 53 (8), (9)
→ Ссылка