Python. Подорожі в часі
В цій статті я хочу розказати про основні операції з датами/часом, які дозволяє здійснювати Пайтон за допомогою модулів стандартної бібліотеки. Мова бути йти про функції з використанням модулів datetime, calendar та time.
Почнемо з перетворень між датами та їх представленнями у вигляді рядків.
Надалі будемо говорити про дату як про обєкт типу datetime.datetime
, який містить такі атрибути: рік, місяць, день, година, хвилина, секунда, мікросекунда та інформація про часовий пояс.
Перетворити рядок заданого формату в дату
1 | import datetime |
Щоб отримати інформацію стосовно специфікаторів формату дати можна звернутися до офіційної документації або до цієї класної шпаргалки.
Перетворити дату в рядок заданого формату
1 | date = datetime.datetime.now() |
Даний код перетворить поточний даточас в представлення дати та часу відповідно до вашої поточної локалізації.
Отримати початок дня для дати
1 | result = date.replace(tzinfo=None, hour=0, minute=0, second=0, microsecond=0) |
Отримати дату без інформації про часовий пояс
1 | result = date.replace(tzinfo=None) |
Це може знадобитися, щоб порівнювати дати з датами, що не мають інформації про часовий пояс, додавати чи віднімати їх. Але будьте уважні, бо таким способом можна втратити кілька годин).
Отримати перше число попереднього місяця
1 | date = datetime.date.today() # or any another date you want |
Спочатку отримуємо перший день для місяця нашої дати. Потім віднімаємо від нього один день - так ми перейдемо на попередній місяць. І наостанок, сформуємо об’єкт дати для першого числа отриманого місяця. Такі маніпуляції потрібні, щоб не робити додаткових перевірок на кількість днів у місяці, перший/останній місяць року.
Перетворити time_struct/timestamp в datetime
1 | time_struct = time.strptime(date_str, date_format) |
mktime спочатку перетворить часоструктуру в кількість секунд, що пройшли з початку Епохи (1 січня 1970 року), а потім створить новий об’єкт дати.
Порівняти date та datetime дати
Якщо у вас є об’єкт, отриманий, наприклад, як datetime.date.today()
і його потрібно порівняти з екземпляром класу datetime.datetime
, то приведемо останній з використанням методу date()
1 | the_date = datetime.datetime.now() |
Перетворити дату в кількість секунд/мілісекунд
1 | date_seconds = time.mktime(date.timetuple()) |
Порівняти дві дати за форматом
Таке може знадобитися, якщо потрібно перевірити, чи співпадає рік і день в дат з різними місяцями і часом (не обов’язково цей приклад, порівнювати можна за будь-яким форматом)
1 | date_one # 2015-08-28 15:57:29.615660 |
Інформація про дату
Отримати інформацію про дату: день, місяць, рік, номер дня у році, номер дня тижня, номер тижня у році, чи високосний рік.
1 | print('Day number: %s' % date.day) |
І наостанок
Надрукувати календар для обраного року в консоль
1 | import calendar |
Сніпет коду до всіх прикладів можна знайти тут на бітбакеті.
Ресурси
Додаткові модулі, які полегшать роботу з датами