Ввод даты и времени с клавы
Задача "На ввод вам дан файл состоящий из пар временных отметок, для каждой последовательной пары отметок вам нужно подсчитать абсолютную разницу во времени в секундах"
Вводные данные (берутся из .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) |