Как сделать текущее время
В этой статье вы научитесь получать в Python текущее время вашего региона, а также различные часовые пояса.
Есть несколько способов узнать текущее время в Python.
Пример 1: Текущее время с использованием объекта datetime
В приведенном выше примере мы импортировали класс datetime из модуля datetime. Затем мы использовали метод now(), чтобы получить объект, содержащий текущую дату и время.
Затем, используя метод datetime.strftime(), мы создали строку, представляющую текущее время.
Если вам нужно создать объект времени, содержащий текущее время, вы можете сделать что-то вроде этого.
Пример 2: Текущее время с использованием модуля времени
Вы также можете узнать текущее время, используя модуль времени.
Пример 3: Текущее время часового пояса
Если вам нужно найти текущее время определенного часового пояса, вы можете использовать модуль pytZ.
Для работы с системной датой и временем используется библиотека time.h .
Типы, определенные в библиотеке time.h
Тип | Описание |
size_t | Целочисленный тип, возвращаемый операцией sizeof . |
clock_t | Арифметический тип, подходящий для представления времени. |
time_t | Арифметический тип, подходящий для представления времени. |
struct tm | Структурный тип, содержащий компоненты календарного времени. |
Для определения текущего календарного времени используется функция
Данная функция возвращает время в секундах начиная с 1 января 1970 г.
Структура tm имеет вид
struct tm
int tm_sec; // секунды после минут [0,59]
int tm_min; // минуты после часов [0,59]
int tm_hour; // часы после полуночи [0,23]
int tm_mday; // день месяца [1,31]
int tm_mon; // месяц года (январь = 0) [0,11]
int tm_year; // год (1900 год = 0)
int tm_wday; // день недели (вс = 0) [0,6]
int tm_yday; // день года (1 января = 0) [0,365]
int tm_isdst; // флаг перехода на летнее время (>0- вкл.)
>;
преобразует календарное время, указанное ptm , сохраняет его в структуре tm и возвращает указатель на нее.
осуществляет обратное преобразование.
возвращает наилучшее приближение процессорного времени, прошедшего с момента запуска программы; для получения времени в секундах значение необходимо разделить на константу, определенную в библиотеке time.h :
Если время не доступно или не может быть представлено, возвращает (clock_t) (-1) .
size_t strftime(
char *restrict s, // указатель на выходную строку
size_t max, // максимальный размер выходной строки
const char *restrict fmt, // указатель на строку формата
const struct tm *restrict tmpt); // указатель на структуру tm
копирует строку fmt в строку s , заменяя спецификаторы формата в fmt соответствующими данными, взятыми из содержимого структуры времени, на которое указывает tmpt ; в строку s помещается не более max символов.
Функция возвращает количество символов (исключая нулевой) в результирующей строке. Если результирующая строка (включая нулевой символ) содержит больше, чем max символов, функция возвращает 0, а содержимое s не определено.
Спец. | Назначение |
%a | Локальное сокращенное название дня недели |
%A | Локальное полное название дня недели |
%b | Локальное сокращенное название месяца |
%B | Локальное полное название месяца |
%c | Локальный разделитель даты и времени |
%d | День месяца в виде десятичного числа (01-31) |
%D | Эквивалент %m%d%y |
%e | День месяца (десятичное число): однозначные числа дополнены пробелом |
%F | Эквивалент %Y-%m-%d |
%g | Последние два разряда года (00-99) |
%G | Год в виде десятичного числа |
%H | Часы (по 24-часовой шкале) в виде десятичного числа (00-23) |
%I | Часы (по 12-часовой шкале) в виде десятичного числа (01-12) |
%j | День года в виде десятичного числа (001-366) |
%m | Месяц в виде десятичного числа (01-12) |
%n | Символ новой строки |
%M | Минуты в виде десятичного числа (00-59) |
%p | Локальный эквивалент a.m./p.m. для 12-часовой временной шкалы |
%r | Локальное 12-часовое время |
%R | Эквивалент %H:%M |
%S | Секунды в виде десятичного числа (00-61) |
%t | Символ горизонтальной табуляции |
%T | Эквивалент %H:%M:%S |
%u | Номер дня недели (1-7), где 1 соответствует понедельнику |
%U | Номер недели в году, считая воскресенье первым днем недели (00-53) |
%w | Номер дня недели в виде десятичного числа, начиная с воскресенья (0-6) |
%W | Номер недели в году, считая понедельник первым днем недели (00-53) |
%y | Год без века в виде десятичного числа (00-99) |
%Y | Год с веком в виде десятичного числа |
%z | Смещение от UTC ("-800" означает на 8 ч по Гринвичу западнее). |
%Z | Наименование часового пояса (если доступно) |
%% | % (то есть знак процента). |
Функция, позволяющая вывести день недели на русском языке
Результат выполнения
Добавление нескольких дней к текущему времени
Рассмотрим еще один пример. Допустим, требуется добавить несколько дней к текущей дате.
Реализация на Си
Результат выполнения
Реализация функции задержки
Результат выполнения
Материал на этой странице устарел, поэтому скрыт из оглавления сайта.
Для работы с датой и временем в JavaScript используются объекты Date.
Создание
Для создания нового объекта типа Date используется один из синтаксисов:
Создаёт объект Date с текущей датой и временем:
Создаёт объект Date , значение которого равно количеству миллисекунд (1/1000 секунды), прошедших с 1 января 1970 года GMT+0.
Если единственный аргумент – строка, используется вызов Date.parse (см. далее) для чтения даты из неё.
new Date(year, month, date, hours, minutes, seconds, ms)
Дату можно создать, используя компоненты в местной временной зоне. Для этого формата обязательны только первые два аргумента. Отсутствующие параметры, начиная с hours считаются равными нулю, а date – единице.
Год year должен быть из 4 цифр.
Отсчёт месяцев month начинается с нуля 0.
Дата задана с точностью до миллисекунд:
Получение компонентов даты
Для доступа к компонентам даты-времени объекта Date используются следующие методы:
getFullYear() Получить год (из 4 цифр) getMonth() Получить месяц, от 0 до 11. getDate() Получить число месяца, от 1 до 31. getHours(), getMinutes(), getSeconds(), getMilliseconds() Получить соответствующие компоненты.
Некоторые браузеры реализуют нестандартный метод getYear() . Где-то он возвращает только две цифры из года, где-то четыре. Так или иначе, этот метод отсутствует в стандарте JavaScript. Не используйте его. Для получения года есть getFullYear() .
Дополнительно можно получить день недели:
getDay() Получить номер дня в неделе. Неделя в JavaScript начинается с воскресенья, так что результат будет числом от 0(воскресенье) до 6(суббота).
Все методы, указанные выше, возвращают результат для местной временной зоны.
Существуют также UTC-варианты этих методов, возвращающие день, месяц, год и т.п. для зоны GMT+0 (UTC): getUTCFullYear() , getUTCMonth() , getUTCDay() . То есть, сразу после "get" вставляется "UTC" .
Если ваше локальное время сдвинуто относительно UTC, то следующий код покажет разные часы:
Кроме описанных выше, существуют два специальных метода без UTC-варианта:
Возвращает число миллисекунд, прошедших с 1 января 1970 года GMT+0, то есть того же вида, который используется в конструкторе new Date(milliseconds) .
Возвращает разницу между местным и UTC-временем, в минутах.
Установка компонентов даты
Следующие методы позволяют устанавливать компоненты даты и времени:
- setFullYear(year [, month, date])
- setMonth(month [, date])
- setDate(date)
- setHours(hour [, min, sec, ms])
- setMinutes(min [, sec, ms])
- setSeconds(sec [, ms])
- setMilliseconds(ms)
- setTime(milliseconds) (устанавливает всю дату по миллисекундам с 01.01.1970 UTC)
Все они, кроме setTime() , обладают также UTC-вариантом, например: setUTCHours() .
Как видно, некоторые методы могут устанавливать несколько компонентов даты одновременно, в частности, setHours . При этом если какая-то компонента не указана, она не меняется. Например:
Автоисправление даты
Автоисправление – очень удобное свойство объектов Date . Оно заключается в том, что можно устанавливать заведомо некорректные компоненты (например 32 января), а объект сам себя поправит.
Неправильные компоненты даты автоматически распределяются по остальным.
Также это используют для получения даты, отдалённой от имеющейся на нужный промежуток времени. Например, получим дату на 70 секунд большую текущей:
Можно установить и нулевые, и даже отрицательные компоненты. Например:
Преобразование к числу, разность дат
Когда объект Date используется в числовом контексте, он преобразуется в количество миллисекунд:
Важный побочный эффект: даты можно вычитать, результат вычитания объектов Date – их временная разница, в миллисекундах.
Это используют для измерения времени:
Бенчмаркинг
Допустим, у нас есть несколько вариантов решения задачи, каждый описан функцией.
Как узнать, какой быстрее?
Для примера возьмём две функции, которые бегают по массиву:
Чтобы померить, какая из них быстрее, нельзя запустить один раз walkIn , один раз walkLength и замерить разницу. Одноразовый запуск ненадёжен, любая мини-помеха исказит результат.
Для правильного бенчмаркинга функция запускается много раз, чтобы сам тест занял существенное время. Это сведёт влияние помех к минимуму. Сложную функцию можно запускать 100 раз, простую – 1000 раз…
Померяем, какая из функций быстрее:
Теперь представим себе, что во время первого бенчмаркинга bench(walkIn) компьютер что-то делал параллельно важное (вдруг) и это занимало ресурсы, а во время второго – перестал. Реальная ситуация? Конечно реальна, особенно на современных ОС, где много процессов одновременно.
Гораздо более надёжные результаты можно получить, если весь пакет тестов прогнать много раз.
В современных браузерах (кроме IE9-) вызов performance.now() возвращает количество миллисекунд, прошедшее с начала загрузки страницы. Причём именно с самого начала, до того, как загрузился HTML-файл, если точнее – с момента выгрузки предыдущей страницы из памяти.
Так что это время включает в себя всё, включая начальное обращение к серверу.
Его можно посмотреть в любом месте страницы, даже в , чтобы узнать, сколько времени потребовалось браузеру, чтобы до него добраться, включая загрузку HTML.
Возвращаемое значение измеряется в миллисекундах, но дополнительно имеет точность 3 знака после запятой (до миллионных долей секунды!), поэтому можно использовать его и для более точного бенчмаркинга в том числе.
Для измерения с одновременным выводом результатов в консоли есть методы:
- console.time(метка) – включить внутренний хронометр браузера с меткой.
- console.timeEnd(метка) – выключить внутренний хронометр браузера с меткой и вывести результат.
Параметр "метка" используется для идентификации таймера, чтобы можно было делать много замеров одновременно и даже вкладывать измерения друг в друга.
При запуске этого примера нужно открыть консоль, иначе вы ничего не увидите.
Современные интерпретаторы JavaScript делают массу оптимизаций, например:
- Автоматически выносят инвариант, то есть постоянное в цикле значение типа arr.length , за пределы цикла.
- Стараются понять, значения какого типа хранит данная переменная или массив, какую структуру имеет объект и, исходя из этого, оптимизировать внутренние алгоритмы.
- Выполняют простейшие операции, например сложение явно заданных чисел и строк, на этапе компиляции.
- Могут обнаружить, что некий код, например присваивание к неиспользуемой локальной переменной, ни на что не влияет и вообще исключить его из выполнения, хотя делают это редко.
Форматирование и вывод дат
Во всех браузерах, кроме IE10-, поддерживается новый стандарт Ecma 402, который добавляет специальные методы для форматирования дат.
Это делается вызовом date.toLocaleString(локаль, опции) , в котором можно задать много настроек. Он позволяет указать, какие параметры даты нужно вывести, и ряд настроек вывода, после чего интерпретатор сам сформирует строку.
Пример с почти всеми параметрами даты и русским, затем английским (США) форматированием:
Вы сможете подробно узнать о них в статье Intl: интернационализация в JavaScript, которая посвящена этому стандарту.
Методы вывода без локализации:
toString() , toDateString() , toTimeString() Возвращают стандартное строчное представление, не заданное жёстко в стандарте, а зависящее от браузера. Единственное требование к нему – читаемость человеком. Метод toString возвращает дату целиком, toDateString() и toTimeString() – только дату и время соответственно.
toUTCString() То же самое, что toString() , но дата в зоне UTC.
Если хочется иметь большую гибкость и кросс-браузерность, то также можно воспользоваться специальной библиотекой, например Moment.JS или написать свою функцию форматирования.
Разбор строки, Date.parse
Все современные браузеры, включая IE9+, понимают даты в упрощённом формате ISO 8601 Extended.
Этот формат выглядит так: YYYY-MM-DDTHH:mm:ss.sssZ , где:
- YYYY-MM-DD – дата в формате год-месяц-день.
- Обычный символ T используется как разделитель.
- HH:mm:ss.sss – время: часы-минуты-секунды-миллисекунды.
- Часть 'Z' обозначает временную зону – в формате +-hh:mm , либо символ Z , обозначающий UTC. По стандарту её можно не указывать, тогда UTC, но в Safari с этим ошибка, так что лучше указывать всегда.
Также возможны укороченные варианты, например YYYY-MM-DD или YYYY-MM или даже только YYYY .
В этой статье мы узнаем, как получить текущую дату и время, используя встроенный в Python модуль datetime. С помощью этого модуля мы можем получить все соответствующие данные в одном объекте или извлечь дату и время отдельно.
Мы также узнаем, как настроить дату и время для разных часовых поясов. Наконец, мы рассмотрим преобразование объектов datetime в популярные метки времени Unix или Epoch.
Получение текущей даты и времени с datetime
Модуль datetime содержит различные классы, чтобы получить информацию о дате и времени:
- datetime.date : Хранит день, месяц и год
- datetime.time : Хранит время в часах, минутах, секундах и микросекундах. Эта информация не зависит от даты
- datetime.datetime : Хранит атрибуты date и time
Получим текущую дату и время с объектом datetime.datetime , так как из него легче извлечь объекты date и time . Для начала давайте импортируем модуль datetime :
Поначалу это выглядит странно, но мы получаем класс datetime из модуля datetime , это две разные вещи.
Мы можем использовать функцию now() , чтобы получить объект с текущей датой и временем:
Запуск этого файла даст нам следующий вывод:
Функция now() дала нам объект со всей датой и временем его создания. Когда мы его печатаем, Python автоматически форматирует объект в строку, чтобы люди могли его легко прочитать.
Вы можете получить отдельные атрибуты даты и времени следующим образом:
Метод now() идеально подходит для захвата текущего времени и даты. Однако, это излишне, когда вы заботитесь только о дате или времени, но не обоих. Как мы можем получить только информацию о дате?
Получение текущей даты
Есть два способа получить текущую дату в Python. В консоли Python мы можем получить дату из объекта datetime с помощью метода date() :
Тем не менее, это кажется пустой тратой на инициализацию объекта datetime только для захвата даты. Альтернативой может быть использование метода today() класса date :
Класс datetime.date представляет собой календарную дату. Его атрибуты year , month и day могут быть доступны так же, как мы обращаемся к ним в объекте datetime .
Например, этот оператор print получает каждый атрибут, а также использует метод weekday() для получения дня недели:
Примечание: Метод weekday() возвращает целое число от 0 до 6 для представления дня недели. 0 соответствует понедельнику. Поэтому в нашем примере мы добавили 1, чтобы напечатать 5-й день недели (пятница), хотя метод weekday() вернул 4.
Теперь, когда мы можем получить текущую дату самостоятельно, давайте посмотрим, как мы можем получить текущее время
Получение текущего времени
Мы фиксируем текущее время от объекта datetime , используя метод time() :
В отличие от получения дат, здесь нет ярлыка для непосредственного отображения текущего времени. Класс datetime.time представляет собой понятие времени как в часах, минутах, секундах и микросекунд - все, что меньше, чем один день.
Как и объект datetime , мы можем получить доступ к его атрибутам напрямую. Вот пример, как мы печатаем current_time в предложении:
По умолчанию функция now() возвращает время вашего местного часового пояса. Что если нам нужно будет преобразовать его в другой, который был установлен в настройках пользователя? Давайте посмотрим, как мы можем предоставить информацию о часовом поясе для получения локализованных объектов time .
Получение текущей даты и времени в другом часовом поясе
Метод now() принимает временную зону в качестве аргумента, так что объект datetime генерируется соответствующим образом. Во-первых, нам нужно получить данные о часовом поясе через библиотеку pytz.
Установите библиотеку pytz :
Теперь давайте используя pytz получим текущую дату и время, если бы мы были в Берлине:
berlin_current_datetime будет объектом datetime со всеми свойствами и функциями, которые мы видели ранее, но теперь он полностью соответствует часовому поясу Берлина.
Если вы хотите узнать время в UTC, вы можете использовать модуль pytz , как и раньше:
Кроме того, для времени UTC вам не нужно использовать модуль pytz вообще. Модуль datetime имеет свойство timezone , которое может быть использовано, как в примере:
Теперь, когда мы можем преобразовать наши даты и время в разные часовые пояса, давайте посмотрим, как мы можем преобразовать его в один из наиболее широко используемых форматов в вычислениях - временные метки Unix.
Преобразование меток времени в даты и время
Компьютерные системы измеряют время на основе количества секунд, прошедших с начала эпохи Unix, то есть 00:00:00 UTC 1 января 1970 года. Приложения, базы данных и протоколы обычно используют временную метку для отображения времени.
Вы можете получить текущую метку времени в Python, используя модуль time :
Функция time.time() возвращает число с плавающей запятой с меткой времени Unix. Вы можете преобразовать метку времени в объект datetime , используя функцию fromtimestamp() :
fromtimestamp() по умолчанию возвращает объект datetime в вашем часовом поясе. Вы можете указать часовой пояс в качестве второго аргумента, если хотите, чтобы он был локализован по-другому.
Например, чтобы преобразовать метку времени в объект datetime в формате UTC, вы можете сделать это:
И наоборот, вы можете использовать метод timestamp() для преобразования объекта datetime в допустимую метку времени:
Вывод
Встроенная Python библиотека datetime позволяет нам получать текущую дату и время с помощью функции now() . Мы можем использовать возвращенный объект datetime , чтобы извлечь только часть даты или часть времени. Мы также можем получить текущую дату с помощью функции today() .
По умолчанию Python создает объекты datetime в нашем местном часовом поясе. Если мы используем библиотеку pytz , мы можем конвертировать даты и время в разные часовые пояса.
Наконец, мы использовали функцию fromtimestamp() для получения метки времени Unix для получения объекта datetime . Если у нас есть объект datetime , мы можем получить метку времени, используя его метод timestamp() .
Читайте также: