как узнать московское время python

Как получить текущую дату и время в Python

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

Мы также узнаем, как настроить дату и время для разных часовых поясов. Наконец, мы рассмотрим преобразование объектов datetime в популярные метки времени Unix или Epoch.

Получение текущей даты и времени с datetime

Модуль datetime содержит различные классы, чтобы получить информацию о дате и времени:

Запуск этого файла даст нам следующий вывод:

Функция now() дала нам объект со всей датой и временем его создания. Когда мы его печатаем, Python автоматически форматирует объект в строку, чтобы люди могли его легко прочитать.

Вы можете получить отдельные атрибуты даты и времени следующим образом:

Метод now() идеально подходит для захвата текущего времени и даты. Однако, это излишне, когда вы заботитесь только о дате или времени, но не обоих. Как мы можем получить только информацию о дате?

Получение текущей даты

Есть два способа получить текущую дату в Python. В консоли Python мы можем получить дату из объекта datetime с помощью метода date() :

Тем не менее, это кажется пустой тратой на инициализацию объекта datetime только для захвата даты. Альтернативой может быть использование метода today() класса date :

Например, этот оператор print получает каждый атрибут, а также использует метод weekday() для получения дня недели:

Примечание: Метод weekday() возвращает целое число от 0 до 6 для представления дня недели. 0 соответствует понедельнику. Поэтому в нашем примере мы добавили 1, чтобы напечатать 5-й день недели (пятница), хотя метод weekday() вернул 4.

Теперь, когда мы можем получить текущую дату самостоятельно, давайте посмотрим, как мы можем получить текущее время

Получение текущего времени

Получение текущей даты и времени в другом часовом поясе

Метод now() принимает временную зону в качестве аргумента, так что объект datetime генерируется соответствующим образом. Во-первых, нам нужно получить данные о часовом поясе через библиотеку pytz.

Установите библиотеку pytz :

Теперь давайте используя pytz получим текущую дату и время, если бы мы были в Берлине:

berlin_current_datetime будет объектом datetime со всеми свойствами и функциями, которые мы видели ранее, но теперь он полностью соответствует часовому поясу Берлина.

Преобразование меток времени в даты и время

Компьютерные системы измеряют время на основе количества секунд, прошедших с начала эпохи Unix, то есть 00:00:00 UTC 1 января 1970 года. Приложения, базы данных и протоколы обычно используют временную метку для отображения времени.

Вы можете получить текущую метку времени в Python, используя модуль time :

fromtimestamp() по умолчанию возвращает объект datetime в вашем часовом поясе. Вы можете указать часовой пояс в качестве второго аргумента, если хотите, чтобы он был локализован по-другому.

Например, чтобы преобразовать метку времени в объект datetime в формате UTC, вы можете сделать это:

И наоборот, вы можете использовать метод timestamp() для преобразования объекта datetime в допустимую метку времени:

Вывод

Источник

Как узнать московское время python

Даты, времена и календари в Python

Даты, времена и календари в Python

Изменение цен на нефть со временем, изменение температуры за день, уровень цен за месяц, доходы за год – все эти компоненты объединяет время. В Data Science часто приходится сталкиваться с временными рядами. Сегодня мы расскажем о стандартных модулях Python, которые предоставляют интерфейс для дат и времени: time, datetime, calendar.

3 основных модуля

В комплекте стандартных библиотек Python имеются три основных модуля для работы со временем, датами и календарем:

Далее мы рассмотрим, как их можно использовать в реальных проектах Data Science и повседневных задачах Python-программиста.

Модуль time для отсчета времени

Время в Python отсчитывается в секундах от начала эпохи. Эпоха может отличаться для разных операционных систем. Для Unix-систем эпоха – это январь 1970 года 00:00:00. Чтобы узнать, какая эпоха на компьютере, используется функция time.gmtime(0) :

Считаем время в Python

Чтобы узнать, сколько прошло секунд с эпохи до настоящего времени, в Python используется функция time :

Можно получить объект time_struct с нынешним временем в вашем часовом поясе, для этого есть localtime :

Получить полный форматированный вариант в читаемом виде поможет функция time.asctime() :

Более удобный формат времени

Здесь %a означает день недели, %d – день месяца, а %Y – год. Полный список доступен в официальной документации.

Из строки в time_stuct

А вот получить из строки (str) соответствующий объект time_struct можно с помощью функции strptime:

Засыпаем на некоторое время

Иногда требуется сымитировать действие, которое занимает определенное время. На помощь придет функция sleep, которая аргументом принимает секунды:

Работаем с датами

Объект time принимает часы, минуты и секунды:

Объект datetime принимает все вышеперечисленное:

Сейчас и сегодня

В Python можно получить сегодняшнюю дату:

А также, текущую дату и время:

Получаем даты из ISO-формата

Помимо прочего, можно получить дату из ISO формат с видом YYYY-MM-DD:

Формат даты из строки

Как и время из модуля time, объект datetime имеет методы strptime и strftime для получение строки из даты и наоборот:

Из секунд в даты

Как уже было сказано, time.time возвращает количество секунд, которые начинаются с эпохи. Эти секунды также можно перевести в дату и время:

Сколько времени прошло

Например, можно получить разницу между сегодняшним и вчерашним днями:

Для более точного подсчета можно добавить часы, минуты, секунды.

Работаем с календарем

Печатаем календарь на месяц

В Python можно получить календарь в читаемом формате с помощью prmonth:

Печатаем календарь на год

А вот функция prcal напечатает весь календарь заданного года:

Дни недели

Что не перечислять дни недели самостоятельно (Monday, Tuesday и т.д), можно использовать готовые перечисления. Также с функцией weekday можно узнать день недели заданного дня:

Еще больше подробностей вы сможете о работе со временем, датами и временными рядами в целом, вы узнаете на наших Python-курсах в лицензированном учебном центре обучения и повышения квалификации IT-специалистов в Москве.

Источник

Как использовать модуль datetime в Python

Datetime — важный элемент любой программы, написанной на Python. Этот модуль позволяет управлять датами и временем, представляя их в таком виде, в котором пользователи смогут их понимать.

datetime включает различные компоненты. Так, он состоит из объектов следующих типов:

Как получить текущие дату и время?

Получить текущую дату в Python

Класс date можно использовать для получения или изменения объектов даты. Например, для получения текущей с учетом настроек подойдет следующее:

Текущая дата — 2020-11-14 в формате год-месяц-день соответственно.

Получить текущее время

Для получения текущего локального времени сперва нужно получить текущие дату и время, а затем достать из этого объекта только время с помощью метода time() :

Компоненты datetime в Python

В этом руководстве речь пойдет о следующих элементах:

Как создавать объекты даты и времени

В этом примере создается объект времени представленный следующим образом (8, 48, 45).

Для создания объекта даты нужно передать дату с использованием следующего синтаксиса:

Вернет вот такой результат:

Timedelta

Все аргументы опциональные и их значения по умолчанию равно 0. Они могут быть целыми или числами с плавающей точкой, как положительными, так и отрицательными. Благодаря этому можно выполнять математические операции, такие как сложение, вычитание и умножение.

Как вычислить разницу для двух дат

Посмотрим на несколько примеров вычисления разницы во времени. Предположим, есть два объекта datetime :

Для получения разницы нужно лишь вычесть значение одного объекта из второго:

Таким образом между 2 и 30 октября 2020 года 28 дней.

Как вычислить разницу двух объектов datetime.time

Такой код вернет следующую ошибку:

Как получать прошлые и будущие даты с помощью timedelta

Поскольку timedelta — это длительность, то для получения прошлой или будущей даты нужно добавить объект timedelta к существующему или вычесть из него же. Вот пример нескольких уравнений, где n — это целое число, представляющее количество дней:

Если нужно, например, получить дату за прошлые две недели, то достаточно вычесть 14 дней из текущей даты:

Предположим, вы задумали практиковать определенный навык в течение 21 дня. Для получения будущей даты нужно добавить 21 день к текущей дате:

Другие арифметические операции с timedelta

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

Часовые пояса

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

Абсолютные даты не содержат информацию, которая бы могла определить часовой пояс или летнее время. Однако с такими намного проще работать.

Относительные же содержат достаточно информации для определения часового пояса или отслеживания изменений из-за летнего времени.

Разница между DST, GMT и UTC

Как работать с часовыми поясами

Рассмотрим, как создать простой относительный объект datetime :

Предположим, нужно получить текущее время для Найроби. Для этого нужно использовать конкретный часовой пояс. Для начала можно с помощью pytz получить все существующие часовые пояса.

Вот некоторые из них:

Для получения времени в Найроби:

А вот так можно получить время Берлина:

Здесь можно увидеть разницу в часовых поясах разных городов, хотя сама дата одна и та же.

Конвертация часовых поясов

При конвертации часовых поясов в первую очередь нужно помнить о том, что все атрибуты представлены в UTC. Допустим, нужно конвертировать это значение в America/New_York :

Другие практические примеры

Всегда храните даты в UTC. Вот примеры:

Как конвертировать строки в datetime

strptime() в Python — это метод из модуля datetime. Вот его синтаксис:

Аргументы формата необязательные и являются строками. Предположим, нужно извлечь текущие дату и время:

Источник

Текущая дата и время в Python

как узнать московское время python. oj 1080x720 4. как узнать московское время python фото. как узнать московское время python-oj 1080x720 4. картинка как узнать московское время python. картинка oj 1080x720 4.

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

Получаем текущую дату и время

Datetime включает в себя разные классы, позволяющие получать нужные временные данные:

Для примера можно вывести в терминал текущую (current) дату и время. Можно воспользоваться объектом datetime.datetime — из него довольно просто извлекаются объекты date и time. Сначала следует импортировать требуемый модуль:

from datetime import datetime

Да, это выглядит странновато, т. к. речь идет о получении класса datetime из модуля datetime, однако это 2 разные вещи. Далее следует воспользоваться функцией now() — она позволит получить объект с текущим временем и датой.

from datetime import datetime

Набрав код выше, вы увидите на экране следующее (в вашем случае вывод изменится, ведь минуты не стоят на месте):

как узнать московское время python. Screenshot 1. как узнать московское время python фото. как узнать московское время python-Screenshot 1. картинка как узнать московское время python. картинка Screenshot 1.

Что произошло? Функция now() отобразила объект, причем с датой и временем создания этого самого объекта. В результате была выведена соответствующая строка. Однако никто не мешает получить временные атрибуты отдельно:

как узнать московское время python. Screenshot 2. как узнать московское время python фото. как узнать московское время python-Screenshot 2. картинка как узнать московское время python. картинка Screenshot 2.

Таким образом, метод now() вполне годится для получения текущей даты и времени. Но что делать, если надо получить лишь дату?

Работа с датой current

Существуют 2 способа получения текущей даты. Первый выводит нужные данные из объекта datetime посредством метода date() :

как узнать московское время python. Screenshot 3. как узнать московское время python фото. как узнать московское время python-Screenshot 3. картинка как узнать московское время python. картинка Screenshot 3.

Во втором применяется метод today() класса date:

как узнать московское время python. Screenshot 4. как узнать московское время python фото. как узнать московское время python-Screenshot 4. картинка как узнать московское время python. картинка Screenshot 4.

Класс datetime.date позволяет получать календарную дату. Также следует добавить, что его атрибуты (year, month, day) бывают доступны и отдельно, как в примере с datetime.

как узнать московское время python. Screenshot 5. как узнать московское время python фото. как узнать московское время python-Screenshot 5. картинка как узнать московское время python. картинка Screenshot 5.

А как поступить, если надо отобразить текущее время отдельно от даты?

Работаем с текущим временем

как узнать московское время python. Screenshot 11. как узнать московское время python фото. как узнать московское время python-Screenshot 11. картинка как узнать московское время python. картинка Screenshot 11.

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

Важно отметить, что есть возможность получить временные данные и с учетом нужного часового пояса (timezone). Как и что используется, поговорим ниже.

Другой часовой пояс: временные зоны (timezones)

Метод now() принимает в Python временную зону в качестве аргумента, так что объект datetime генерируется соответствующим образом.

Для получения информации с учетом часового пояса необходимо задействовать библиотеку pytz (если ее нет, потребуется инсталляция, для чего подойдет команда pip3 install pytz ).

Так как я нахожусь в Минске, давайте получим текущие временные значения (times) именно для Минска:

как узнать московское время python. Screenshot 6 1. как узнать московское время python фото. как узнать московское время python-Screenshot 6 1. картинка как узнать московское время python. картинка Screenshot 6 1.

Строка в коде minsk_current_datetime является объектом datetime, то есть все то же самое, что и ранее, но уже в полном соответствии с часовым поясом Республики Беларусь.

Когда надо узнать время в UTC, тоже пригодится модуль pytz:

как узнать московское время python. Screenshot 7. как узнать московское время python фото. как узнать московское время python-Screenshot 7. картинка как узнать московское время python. картинка Screenshot 7.

Получить время UTC можно и без модуля pytz, т. к. datetime имеет полезное свойство timezone. Что же, давайте задействуем свойство timezone:

как узнать московское время python. Screenshot 8. как узнать московское время python фото. как узнать московское время python-Screenshot 8. картинка как узнать московское время python. картинка Screenshot 8.

Таким образом, можно без проблем преобразовать текущие даты и значения времени в различные часовые пояса.

Преобразование временных меток

Также может быть очень полезным преобразовывать время в один из самых широко применяемых форматов в вычислениях. Речь идет о временных метках Unix.

Доподлинно известно, что компьютерные системы измеряют время не так, как люди. Здесь за основу берется число секунд, которые прошли с начала Unix-эпохи, то есть с 00:00:00 UTC 1.01.1979. Базы данных, протоколы и приложения обычно задействуют временную метку.

Для ее получения в «Питоне» пригодится модуль time, следовательно, первая строка будет import time :

как узнать московское время python. Screenshot 9. как узнать московское время python фото. как узнать московское время python-Screenshot 9. картинка как узнать московское время python. картинка Screenshot 9.

Функция time.time() возвращает пользователю число с плавающей запятой и с временной меткой Unix.

На этом все. Очень надеемся, что вы получили некоторое представление об использовании встроенных Python-библиотек и модулей, необходимых для отображения временных значений.

Источник

«Eppur si muove!»* или Работаем с таймзонами в Python

На нашей планете Земля, в одно и то же время, в разных географических точках планеты может быть разное время суток. Это следствие того, что наш мир — вращающийся геоид, а не плоский диск, а что наша Солнечная система имеет только одну звезду — Солнце. Ещё со школы всем известно о часовых поясах, и все мы встречались с их проявлениями в реальной жизни («Московское время – 15 часов, в Петропавловске-Камчатском – полночь», джетлаг при дальних перелётах, и т.д.). К несчастью, часовые пояса всего лишь частично основаны на физических особенностях нашего мира, и при компьютерных вычислениях приходится учитывать другие, порой неожиданные, нюансы.

* «И всё-таки она вертится!» — крылатая фраза, которую якобы произнёс Галилео Галилей, покидая процесс инквизиции после отречения от своего убеждения в том, что Земля вращается вокруг Солнца. В нашем случае, увы, это вращение приводит ко всем этим «замечательным» проблемам с часовыми поясами.

Что общего у этой статьи и Галилео? Да, в общем-то, ничего. Боюсь, что если бы наш мир был центром вселенной, нам всё равно пришлось бы иметь дело с таймзонами. Будем считать заголовок моей оплошностью, которую я уже не могу исправить (хотя я могу).

Что такое «Часовой пояс»?

Какой у вас часовой пояс? Если вы ответите «UTC+3» — это будет правильным ответом только на текущий момент времени, но в целом это заявление некорректно. Если вы посмотрите на базу данных часовых поясов, то увидите, к примеру, что Берлин и Вена, несмотря на смещение «UTC+1», имеют разные часовые пояса («Europe/Berlin» и «Europe/Vienna»). Почему так? Причина в том, что они имели разное летнее время (DST) в разные периоды истории. Даже если сегодня эти две страны и эти два города имеют одинаковые правила DST, сто лет назад это было не так. Например, и в Австрии и в Германии в разные периоды времени не было перехода на летнее время: в Австрии с 1920 года, а в Германии с 1918. Во время Второй мировой войны обе страны имели одинаковые правила DST (что не удивительно), однако после её окончания снова рассинхронизировались. Германия отменила переход на летнее время в 1949 и ввела его снова в 1979, Австрия же отменила DST в 1948 и ввела его снова в 1980. Самое же худшее состоит в том, что они даже не согласовали одинаковую дату перехода на летнее время.

И так происходит по всему миру. Для компьютерных вычислений, переход на летнее время — огромная проблема, ведь мы предполагаем, что время имеет непрерывный мотононный ход. С переходом на летнее время у нас каждый год есть час, который повторяется дважды, и есть час, который мы просто пропускаем. Если при записи в лог вы указываете локальное время, у вас можем нарушится порядок строк лога при сортировке.

Цитата из документации pytz:

Так, например, в таймзоне US/Eastern в 2002 году во время окончания действия DST, 27 октября время 01:30 наступило дважды, а во время начала действия DST, 7 апреля время 02:30 не наступило, т.к. в 02:00 часы перевели на час вперёд.

Но в таймзонах хранятся не только правила перехода на летнее время. Некоторые страны меняют часовые пояса, иногда даже без изменения DST. Так, например, в 1915 году Варшава перешла на Центральноевропейское время. В результате в полночь 5 августа 1915 года часы были переведены на 24 минуты назад (при этом в Варшаве действовало летнее время).
Вообще, с часовыми поясами творится ещё больший ад. Есть как минимум одна страна, таймзона которой была различна в течение дня из-за синхронизации времени 0:00 с временем восхода Солнца.

Где же здравый смысл?

Здравый смысл есть и он называется Всемирное координированное время (UTC). UTC — это таймзона без перехода на летнее время и без каких бы то ни было изменений в прошлом. Однако по причине того, что наша Земля — вращающийся геоид и в мире есть вещи, которые мы не можем контролировать, существует проблема корректировочных секунд (leap seconds). Будет ли UTC учитывать корректировочные секунды (которые нерегулярны и поэтому их достаточно проблематично учитывать при вычислениях), или не будет (тогда каждая таймзона будет иметь разницу в несколько секунд с UTC), — насколько мне известно, ещё не решено.

Несмотря на это, прямо сейчас UTC — самый безопасный вариант. Из UTC вы можете сконвертировать время в локальное для любого часового пояса. Обратное преобразование, учитывая вышесказанное, невозможно.

Итак, вот главное практическое правило, которое никогда вас не подведёт:

Всегда храните и работайте со временем в UTC. Если вам нужно сохранить оригинальные данные — пишите их отдельно. Никогда не храните локальное время и таймзону!

В чём проблема?

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

Если закрыть глаза на тот ужасный API, с помощью которого вам приходится добавлять информация о таймзоне к объекту datetime, всё равно остаются проблемы. Когда вы работаете с объектами datetime в Питоне, вам рано или поздно придётся добавлять или удалять tzinfo во всех местах вашей программы.

Другая проблема состоит в том, что у вас есть два способа создать объект datetime с текущим временем в Python:

Один возвращает время в UTC, другой — локальное время. Однако объект datetime не скажет вам, что такое «локальное время» (потому что он не имеет информации о таймзоне, по крайней мере до версии Python 3.3), и нет никакого способа узнать, который из этих объектов хранит время в UTC.

Если вы конвертируете UNIX timestamp в объект datetime, вам так же следует быть осторожным при использовании метода datetime.datetime.utcfromtimestamp, потому что он принимает timestamp в локальном времени.

Библиотека datetime так же предоставляет объекты date и time, в которые абсолютно бесполезно добавлять tzinfo. Объект time не может быть переведён в другую таймзону, поскольку для этого нужно знать дату. Объект date вообще имеет смысл только для локальной таймзоны, потому что «сегодня» для меня может быть «вчера» или «завтра» для вас — скажем спасибо чудесному миру часовых поясов.

Так каковы рекомендации специалистов?

Теперь мы знаем, кто виноват. Но что делать? Если мы проигнорируем теоретические проблемы, проявляющиеся только в случае работы с историческими датами в прошлом, то вот вам ряд рекомендаций. На тот случай, если вам приходится работать с историческими датами, есть альтернативный модуль mxDateTime, достаточно качественно спроектированный и даже поддерживающий различные календари (Григорианский и Юлианский).

Используйте UTC внутри программы

Если вам нужно получить текущее время, всегда используйте datetime.datetime.utcnow(). Если вы получаете локальное время от пользователя, всегда тут же преобразовывайте его в UTC. Если однозначного преобразования сделать не получается — сообщайте об этом пользователю, не пытайтесь угадать его время вслепую. Во время перехода на летнее время и обратно, мой iPhone несколько раз не смог правильно перевести время. Я же знаю, когда это нужно сделать, поскольку мне приходится переводить стрелочные часы.

Никогда не используете время с часовым поясом

Другая причина не использовать время с таймзоной заключается в том, что объект tzinfo очень специфичен и сильно зависит от своей реализации. Не существует стандартного способа передавать информацию о таймзоне (за исключением, пожалуй, таймзоны UTC) в другие языки, по HTTP и т.д. К тому же объекты datetime с информацией о таймзоне, зачастую, становятся слишком огромными при сериализации с помощью модуля pickle, или их даже невозможно бывает сериализовать (это зависит от реализации объекта tzinfo).

Преобразования для форматирования

Если вам нужно показать время в таймзоне пользователя, возьмите объект datetime с временем по UTC, добавьте в него таймзону UTC, преобразуйте время в локальное время пользователя и отформатируйте его. Не используйте преобразование таймзоны методами tzinfo, ибо они работают некорректно, используйте pytz. Потом переведите время в «наивное» путём отбрасывания смещения таймзоны из получившегося объекта datetime, который вы создали для форматирования и продолжайте жить счастливо.

Бонус от переводчика для тех, кто дочитал до конца:

А в следующей своей статье я напишу, где автор неправ, почему он ошибается и как же всё-таки нужно делать правильно.

Источник

Добавить комментарий

Ваш адрес email не будет опубликован. Обязательные поля помечены *