Коробка с питоном
Ссылка
нажмите — покажем
нажмите — покажем
Я знаю на опыте, как иногда не удобно работать с датами и временем в Питоне.
В стандартной библиотеке есть как и большое количество типов данных (date, time, tzinfo, timedelta, relativedelta, ...) так и куча модулей (datetime, time, calendar, dateutil, ...) которые помогают работать с ними. Но содержать в голове, да еще и уметь работать с ними иногда проблематично.
Одна из библиотек, которая облегчает работу с сабжем - arrow. Давайте покажу на практике, насколько с ней удобно работать:
1) Получение времени
Начнём с легкого - получим время по MSK и UTC:
>>> arrow.now() # получаем текущее время по MSK
2023-06-02T18:46:55.188882+03:00
>>> arrow.utcnow() # а теперь текущее, но в UTC
2023-06-02T15:46:55.188882+00:00
А если нам надо текущее время с другой таимзоной?
>>> arrow.get().to("US/Pacific")
2023-06-02T08:49:39.794355-07:00
Это было просто. А что если нам нужно спарсить время из шаблона?
>>> arrow.get('2023/06-02|19:00:{00}', 'YYYY/MM-DD|HH:mm:{ss}') #обратите внимание на шаблон!
2023-06-02T19:00:00+00:00
Ещё arrow позволяет искать даты в строке по шаблону:
>>>arrow.get('Он родился 16 Мая 2020 года', 'DD MMMM YYYY', locale="ru")
2020-05-16T00:00:00+00:00
2) Работа со временем
Например, вот так можно заменить час в исходной дате:
>>>arrow.now().replace(hour=12)
2023-06-02T12:00:29.180755+03:00
Или добавить к текущей дате +5 недель:
>>>arrow.now().shift(weeks=+5)
2023-07-07T19:02:27.174819+03:00
Ну и в конце, давайте отформатируем текущее время в строку по шаблону:
>>>arrow.now().format('YYYY HH:mm:ss MM/DD')
2023 19:05:04 06/02
3) Очеловечивание времени
Возьмем задачу. Нам нужно сказать, через сколько мы прибудем домой. Делается это так:
>>> start_time = arrow.now()
>>> arrive_time = start_time.shift(hours=+3, minutes=10, seconds=12)
>>> humanized = arrive_time.humanize(locale="ru", granularity=["hour", "minute", "second"])
>>> print(f"Вы прибудете домой {humanized}")
Вы прибудете домой через 3 часа 10 минут 12 секунд
А если мы хотим из человеческого формата перевести в машинночитаемый?
>>> start_time.dehumanize(humanized, locale="ru")
2023-06-02T22:28:08.141525+03:00
4) Работа с диапазонами
Как раз недавно решал следующую задачку: дается временной промежуток, для него нужно сделать почасовые интервалы. С arrow всё это делается вот так:
start = datetime(2023, 1, 1, 00, 00)
end = datetime(2023, 1, 1, 23, 00)
for r in arrow.Arrow.span_range('hour', start, end):
print(r)
(<Arrow [2023-01-01T00:00:00+00:00]>, <Arrow [2023-01-01T00:59:59.999999+00:00]>)
....
(<Arrow [2023-01-01T23:00:00+00:00]>, <Arrow [2023-01-01T23:59:59.999999+00:00]>)
В любом случае, рекомендую присмотреться, возможно для вас эта библиотека станет одним еще довольно удобным инструментом!
GitHub | Документация
#библиотека
18 · 551 ·