Рубрики
Без рубрики

Переваривание даты и времени Python в LightSpeed ⚡

Добро пожаловать на второй пост в моей серии Lightspeed Python! Сегодня я собираюсь поговорить о DateTime … Теги с Python, CodeNewie.

Добро пожаловать на второй пост в моей серии Lightspeed Python! Сегодня я собираюсь поговорить о datetime , TimEdelta. , часовой пояс , Дата и время Модули, которые продолжают запутать много программистов, которые начинаются на языке, если только потому, что есть тона модулей.

Некоторые экзотические странности, связанные с датами, которые полезны только для хронологических волшебников, здесь не будут обсуждаться. В частности, мы не будем смотреть в разные календарные системы или выпрыгивающие секунды. Насколько я знаю, это даже не поддерживается в нынешней реализации (но не стесняйтесь называть меня на этом. Прыжок дней являются поддерживается и работает правильно в Python).

Также это будет только покрывать Python 3, так как Python 2 приближается к концу его жизни.

Итак, давайте доберемся до скорости.

Быстрое напоминание : В этом посте я собираюсь использовать термин «остаток» несколько раз. Если вы не знаете, что это значит, это когда вы разделяете два числа (например, 9/2) и получаете номер обратно (1 в примере).

Некоторые быстрые советы, которые вы, вероятно, ищете:

from datetime import datetime, timezone, timedelta, date, time
datetime.now()
#output: The current day and time
datetime.now(timezone.utc)
#output: The current day and time in the UTC timezone

# Assuming now() is April 20, 2019 01:03:58 PM
# Don't like leading zeros? try %-[letter] on Unix
# or %#[letter] on Windows to get rid of it.
"{:%d/%m/%y %H:%M:%S}".format(datetime.now())
#output: "20/4/19 13:03:58"
"{:%B %d, %Y}".format(datetime.now())
#output: "April 20, 2019"
"{:%a %b %d, %I:%M:%S %p}".format(datetime.now())
#output: "Sat Apr 20, 01:03:58 PM"
"{:%A, %B %d, %Y}".format(datetime.now())
#output: "Saturday, April 20, 2019"
"{:%m/%d/%Y}".format(datetime.now())
#output: "04/20/2019"

datetime(2019, 5, 18, 15, 17, 8, 132263).isoformat()
#output: "2019-05-18T15:17:08.132263"
datetime(2019, 5, 18, 15, 17, tzinfo=timezone.utc).isoformat()
#output: "2019-05-18T15:17:00+00:00"

# And who could forget:
"{:%Y-%m-%d}".format(datetime.now())
#output: "2019-04-20"

TimEdeltas может представлять дату с дни между -99999999 и 999999999 и 999999999 гг. (который переводится между годами 2739726 и 2739726. TimEDeltas может быть максимально небольшим, как 1 микросекунда, но не ожидайте, что ваши системные часы будут такими точными! (Вы не извлекаете текущее время с TimeDelta , в любом случае.

  • Вы можете быстро приспособиться к TimeDelta Объект, поставляя следующие аргументы: ( дней , Seconds , микросекунды ).

    • Для большей гибкости у нас есть аргументы ключевых слов дни , секунды , микросекунды , Миллисекунды , минут , часы и недели .
  • С двумя TimeDelta объекты, мы можем добавить и вычесть их, и результат будет другим TimEdelta. . Обратите внимание, что мы не может Умножьте, разделите или возьмите их оставшуюся и ожидать, чтобы получить TimeDelta Отказ

    • Мы может Умножьте, разделите и возьмите оставшуюся часть TimeDelta и а Номер и результат будет еще одним TimeDelta Отказ
    • Мы также можем сделать вышеуказанные три операции на два TimeDelta объекты, но вместо того, чтобы получить TimeDelta , Мы получим число Отказ

Численные аргументы во всех вышеперечисленных могут быть плавающими или INT, Python не заботится, какой.

The TimeDelta Class регулирует поля для вас

Скажем, вы звоните конструктору Timetelta (Milliseconds = 1,5/1000) . Это равно TimeDelta (Microconds = 2) . Все поля нормализуются, чтобы быть целыми числами.

Имеет следующие поля: Год , месяц , день , час , минута , Второй , microcond. , TZINFO (Необычное имя для часового пояса) и Сложить (См. Раздел Timzone для получения дополнительной информации об этом). Каждый из них может быть заменить () d.

Разница между этим и TimeDelta Является ли этот класс для хранения в реальном времени дня, а не смещения или разницы. А datetime может представлять годы от 1 до 9999.

Можно комбинировать Дата и время объект в datetime используя (объект dateTime) .combine (дата, время, .tzinfo) метод.

Как на Python 3.8, datetime.fromisocalendar () Может использоваться для поворота даты календаря ISO на datetime объекты.

Можно добавить или вычитаться на TimeDelta чтобы получить datetime Отказ Два datetime Вычитание объектов делает TimeDelta Отказ

datetime , Дата и время У всех есть платье Метод, который форматирует дату в строку. Полный список кодов форматирования отсутствует из объема этого поста, и вы можете найти их в Python Docs Отказ ( dateTime также Strptime Метод, который поворачивается в указанной строке обратно в dateTime объект Только .)

Имеет следующие поля: Год , месяц , день Отказ Каждый из них может быть заменить () d.

Как на Python 3.8, date.fromisocalendar () Может использоваться для поворота даты календаря ISO на Дата объекты.

Можно добавить или вычитаться на TimeDelta чтобы получить Дата Отказ Два Дата Вычитание объектов делает TimeDelta Отказ

Имеет следующие поля: час , минута , Второй , microcond. , TZINFO (Необычное имя для часового пояса) и Сложить (См. Раздел TimeZone для получения дополнительной информации об этом). Каждый из них может быть заменить () d. Он имеет разрешение 1 микросекунда, и он может быть отформатирован с изоформат () а также с strftime () Отказ

Alert Spoiler: пока приятно, что мы получаем реализацию часовых поясов в Python, это на самом деле не Определить любые часовые появления. Так что, если кто-то не придет и подкласс Tzinfo. (Суперкласс TimeZone ), следующий теоретический раздел может стать скучным для некоторых людей и может быть пропущена.

Python на самом деле не реализует разумные часовые появления. Согласно Документация TZINFO – это просто абстрактный класс, который должен быть реализован пользователем.

Я бы порекомендовал третью сторону Пыта Модуль для борьбы с часовыми поясами.

Этот ответ был для Python 2, но это также относится к Python 3. Примечание: часовой пояс это подкласс Tzinfo. .

Не заботятся, я могу просто сделать пакет Pypi, который разрешит это очевидное отсутствие функциональности, верно? Ну … Это тема другого dev.to post. 😆

А часовой пояс Объект позволяет DateTime. и время Объекты должны быть правильными для часовых поясов других пользователей. Это особенно важно, если вы строите приложение, где несколько пользователей необходимо общаться на международном уровне. Раньше он имел зернистость протокола, но как Python 3.7, это меньше, чем (возможно, микросекундная гранулярность Но Это чистые спекуляции ).

Тогда как datetime и время Вершинозоны поддержки, дата делает не Верхзоны поддержки. Это не надо, потому что у него нет поля часов.

Чтобы быстро отключить часовые появления для datetime или время , позвоните [your_datetime_object.replace] (tzinfo = null) . Точно так же, чтобы включить их, позвоните [your_datetime_object.replace] (tzinfo = your_tzinfo_object) .

Случайная проблема заключается в том, как мы узнаем время, которое повторило себя, скорее всего, на следующий час или два, потому что дневное сбережения только что началось или закончилось (или, если какой-то графство решает изменить его компенсацию, как Судан в 2017 году Пример или Самоа в 2011 году для более экстремального случая). Если вы используете Python 3.6 или позже, datetime и время объекты имеют Сложить поле, которое может решить двусмысленность. Это поле 0 или 1. Значение 0 представляет более ранние два момента с одинаковым представлением времени стены, а 1 представляет собой более позднюю.

Сложить Также аргумент ключевых слов в datetime конструктор. По умолчанию по умолчанию 0.

Во всяком случае, когда два время или datetime Сравниваются объекты, копия этих объектов выполнены, и все факторы выше, нормируются в час и минуту, прежде чем тестировать, больше ли они больше или меньше друг друга.

Предупреждение: Если ваша версия Python старше 3,3, сравнения равенства между A datetime с часовым поясом и один без часовой зоны будет поднять Джеррору. То же самое относится к время объекты. Поскольку Python 3.3 эти объекты никогда не будут равны. Менее, чем и больше, чем сравнения все еще поднимают вид, что.

Должен ли я использовать локальные или часовые знание данных?

Придерживаться местными временами.

Может быть заманчиво написать все в UTC и просто забыть все остальное, но UTC – не панацея.

Время очень трудно получить правильно. Там могут быть маленькие краевые случаи, которые восполняют ваше приложение. Хуже, поскольку пришло время, это происходит в режиме реального времени, и вы, вероятно, не закончили обернуть голову вокруг маленьких деталей последних изменений в то время, когда ваши пользователи начинают подавать ошибки в своем приложении, не сообщают о правильном времени для них (Я не могу винить вас, мне пришлось подождать пару дней до обновления Red Hat Chate The System Tzdata файлов).

К счастью, подавляющее большинство разработчиков сделают приложения для пользователей в свое местное время, где стоит соблюдать время прямые сдвиги на часы операционной системы. Так что используйте это.

Эта статья отлично читает об этих вопросах.

Вы должны использовать TimEdelta. и datetime Классы, если у вас нет особых причин использовать что-то еще.

Если вы видите какие-либо осторожные ошибки в этом посте, обязательно уведомите меня, чтобы я мог их исправить.

Оригинал: “https://dev.to/zenulabidin/digesting-python-date-and-time-at-lightspeed-2c19”