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

Доброго времени суток! Эта статья будет короткой, но тем не менее, вопрос которому она посвящена достаточно часто встречается у начинающих программистов. А расскажу я в этой статье как можно узнать (получить) текущее время в программе, написанной на C#. Ну а чтобы эта статья не была уж очень короткой, я немного затрону и вопрос форматирования даты/времени при выводе пользователю (отображении). А теперь приступим к делу. Ниже приведен код консольной программы, которая получает текущие дату и время и выводит их в консоль. Посмотрев на этот код Вы поймете, насколько это просто…
using System; using System.Collections.Generic; using System.Linq; using System.Text; namespace GetTime < class Program < static void Main(string[] args) < //Текущие дата/время хранятся в свойстве Now класса DateTime Console.WriteLine(DateTime.Now); //Получаем текущие дату и время, выводим их в консоль //Чтобы программа сразу же не закрылась Console.ReadKey(); >> >
Как можно было заметить из приведенного выше примера, текущие дата и время возвращаются статическим свойством «Now» класса «DateTime», соответственно для получения текущих даты и времени в нужном месте программы мы просто вставили «DateTime.Now». Причем в нашем случае, мы сразу же и вывели в консоль полученную информацию.
Свойство «Now» класса «DateTime» возвращает объект типа «DateTime», а при выводе в консоль, автоматически вызвался метод «ToString» данного класса.
То что метод «ToString» в нашем случае вызывается автоматически довольно удобно, если бы не одно но… В таком случае, мы получаем отформатированные по умолчанию вывод даты и времени. Если запустить программу на моем ПК, то получится примерно следующее:

Результат вывода отформатированной по умолчанию даты (и времени)
Т.е. мы увидели на экране текущие и дату и время, причем в жестко определенном формате (и в каком именно, решали не мы)… А если нужно вывести только время (без даты)? Или указать не номер месяца, а его название? К счастью, при разработке в C# продумали эти варианты. Метод «ToString» класса «DateTime» имеет несколько вариантов перегрузки. И один из них мы как раз и будем использовать, чтобы получить нужный нам результат. Смотрите пример кода, приведенный ниже:
using System; using System.Collections.Generic; using System.Linq; using System.Text; namespace GetTime < class Program < static void Main(string[] args) < //Текущие дата/время хранятся в свойстве Now класса DateTime Console.WriteLine(DateTime.Now.ToString("HH:mm:ss")); //Выводим только время Console.WriteLine(DateTime.Now.ToString("dd MMMM yyyy")); //Выводим дату, выводится название месяца а не его номер //Чтобы программа сразу же не закрылась Console.ReadKey(); >> >
В примере мы сначала выводим исключительно время (для этого в качестве параметра метода «ToString» передаем строку «HH:mm:ss»), а потом выводим дату (передав строку «dd MMMM yyyy») в тот же метод. В результате получим следующий вывод в консоль:

Форматированный вывод даты и времени
Строки, которые мы указывали в качестве параметра метода «ToString» представляют собой формат вывода (нужный нам). Давайте для примера разберем строку значение формата «HH:mm:ss»:
- «HH» означает что в этом месте нужно вывести часы в 24-часовом формате;
- «:» просто разделить (тут может быть и другой символ, например, пробел или слэш…);
- «mm» означает что в этом месте нужно вывести минуты ( в формате «00»-«59»);
- «ss» означает что в этом месте нужно вывести секунды (в формате «00»-«59»).
Подробнее о форматированном выводе (преобразовании в строку) я расскажу в отдельной статье, а сейчас напомню, чтобы получить (узнать) текущие дату и время в своей программе, просто вставьте в нужно место «DateTime.Now». Например так:
//Получим текущее время (и дату) и сохраним её в переменную nowTime DateTime nowTime = DateTime.Now;
Добавить комментарий Отменить ответ
Для отправки комментария вам необходимо авторизоваться.
Текущая дата и время в javascript
![]()
Для вывода полной информации о дате и времени используем функцию date().
Data = new Date(); document.write(Data);
Tue Mar 24 2015 10:18:19 GMT+0300 (RTZ 2 (зима))
Мы получили всю информацию, но в таком формате её выводить не стоит, для функции data есть методы, которые позволят вытащить нужные нам значения.
- getFullYear — получение года
- getMonth — получение месяца (0 — 11)
- getDate — получение числа месяца (1 — 31).
- getHours — получение часа (0 — 23).
- getMinutes — получение минуты (0 — 59)
- getSeconds — получение секунд (0 — 59)
Рассмотрим на примере.
Data = new Date(); Year = Data.getFullYear(); Month = Data.getMonth(); Day = Data.getDate(); Hour = Data.getHours(); Minutes = Data.getMinutes(); Seconds = Data.getSeconds(); // Вывод document.write(Year); document.write(Month); document.write(Day); document.write(Hour); document.write(Minutes); document.write(Seconds);
Получение текущей даты с числом, названием месяца и года
Data = new Date(); Year = Data.getFullYear(); Month = Data.getMonth(); Day = Data.getDate(); // Преобразуем месяца switch (Month) < case 0: fMonth="января"; break; case 1: fMonth="февраля"; break; case 2: fMonth="марта"; break; case 3: fMonth="апреля"; break; case 4: fMonth="мае"; break; case 5: fMonth="июня"; break; case 6: fMonth="июля"; break; case 7: fMonth="августа"; break; case 8: fMonth="сентября"; break; case 9: fMonth="октября"; break; case 10: fMonth="ноября"; break; case 11: fMonth="декабря"; break; >// Вывод document.write("Сегодня " + Day + " " + fMonth + " " + Year + " года");
И увидим результат:
Сегодня 24 марта 2015
Получение текущего времени
Data = new Date(); Hour = Data.getHours(); Minutes = Data.getMinutes(); Seconds = Data.getSeconds(); // Вывод document.write("Текущее время: " + Hour + ":" + Minutes + ":" + Seconds);
Текущее время: 10:49:36
Дата и Время
Материал на этой странице устарел, поэтому скрыт из оглавления сайта.
Более новая информация по этой теме находится на странице https://learn.javascript.ru/date.
Для работы с датой и временем в JavaScript используются объекты Date.
Создание
Для создания нового объекта типа Date используется один из синтаксисов:
Создаёт объект Date с текущей датой и временем:
var now = new Date(); alert( now );
new Date(milliseconds)
Создаёт объект Date , значение которого равно количеству миллисекунд (1/1000 секунды), прошедших с 1 января 1970 года GMT+0.
// 24 часа после 01.01.1970 GMT+0 var Jan02_1970 = new Date(3600 * 24 * 1000); alert( Jan02_1970 );
new Date(datestring)
Если единственный аргумент – строка, используется вызов Date.parse (см. далее) для чтения даты из неё.
new Date(year, month, date, hours, minutes, seconds, ms)
Дату можно создать, используя компоненты в местной временной зоне. Для этого формата обязательны только первые два аргумента. Отсутствующие параметры, начиная с hours считаются равными нулю, а date – единице.
- Год year должен быть из 4 цифр.
- Отсчёт месяцев month начинается с нуля 0. Например:
new Date(2011, 0, 1, 0, 0, 0, 0); // // 1 января 2011, 00:00:00 new Date(2011, 0, 1); // то же самое, часы/секунды по умолчанию равны 0
Дата задана с точностью до миллисекунд:
var date = new Date(2011, 0, 1, 2, 3, 4, 567); alert( date ); // 1.01.2011, 02:03:04.567
Получение компонентов даты
Для доступа к компонентам даты-времени объекта Date используются следующие методы:
getFullYear() Получить год (из 4 цифр) getMonth() Получить месяц, от 0 до 11. getDate() Получить число месяца, от 1 до 31. getHours(), getMinutes(), getSeconds(), getMilliseconds() Получить соответствующие компоненты.
Не getYear() , а getFullYear()
Некоторые браузеры реализуют нестандартный метод getYear() . Где-то он возвращает только две цифры из года, где-то четыре. Так или иначе, этот метод отсутствует в стандарте JavaScript. Не используйте его. Для получения года есть getFullYear() .
Дополнительно можно получить день недели:
getDay() Получить номер дня в неделе. Неделя в JavaScript начинается с воскресенья, так что результат будет числом от 0(воскресенье) до 6(суббота).
Все методы, указанные выше, возвращают результат для местной временной зоны.
Существуют также UTC-варианты этих методов, возвращающие день, месяц, год и т.п. для зоны GMT+0 (UTC): getUTCFullYear() , getUTCMonth() , getUTCDay() . То есть, сразу после «get» вставляется «UTC» .
Если ваше локальное время сдвинуто относительно UTC, то следующий код покажет разные часы:
// текущая дата var date = new Date(); // час в текущей временной зоне alert( date.getHours() ); // сколько сейчас времени в Лондоне? // час в зоне GMT+0 alert( date.getUTCHours() );
Кроме описанных выше, существуют два специальных метода без UTC-варианта:
Возвращает число миллисекунд, прошедших с 1 января 1970 года GMT+0, то есть того же вида, который используется в конструкторе new Date(milliseconds) .
Возвращает разницу между местным и UTC-временем, в минутах.
alert( new Date().getTimezoneOffset() ); // Для GMT-1 выведет 60
Установка компонентов даты
Следующие методы позволяют устанавливать компоненты даты и времени:
- 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 . При этом если какая-то компонента не указана, она не меняется. Например:
var today = new Date; today.setHours(0); alert( today ); // сегодня, но час изменён на 0 today.setHours(0, 0, 0, 0); alert( today ); // сегодня, ровно 00:00:00.
Автоисправление даты
Автоисправление – очень удобное свойство объектов Date . Оно заключается в том, что можно устанавливать заведомо некорректные компоненты (например 32 января), а объект сам себя поправит.
var d = new Date(2013, 0, 32); // 32 января 2013 . alert(d); // . это 1 февраля 2013!
Неправильные компоненты даты автоматически распределяются по остальным.
Например, нужно увеличить на 2 дня дату «28 февраля 2011». Может быть так, что это будет 2 марта, а может быть и 1 марта, если год високосный. Но нам обо всем этом думать не нужно. Просто прибавляем два дня. Остальное сделает Date :
var d = new Date(2011, 1, 28); d.setDate(d.getDate() + 2); alert( d ); // 2 марта, 2011
Также это используют для получения даты, отдалённой от имеющейся на нужный промежуток времени. Например, получим дату на 70 секунд большую текущей:
var d = new Date(); d.setSeconds(d.getSeconds() + 70); alert( d ); // выведет корректную дату
Можно установить и нулевые, и даже отрицательные компоненты. Например:
var d = new Date; d.setDate(1); // поставить первое число месяца alert( d ); d.setDate(0); // нулевого числа нет, будет последнее число предыдущего месяца alert( d );
var d = new Date; d.setDate(-1); // предпоследнее число предыдущего месяца alert( d );
Преобразование к числу, разность дат
Когда объект Date используется в числовом контексте, он преобразуется в количество миллисекунд:
alert(+new Date) // +date то же самое, что: +date.valueOf()
Важный побочный эффект: даты можно вычитать, результат вычитания объектов Date – их временная разница, в миллисекундах.
Это используют для измерения времени:
var start = new Date; // засекли время // что-то сделать for (var i = 0; i < 100000; i++) < var doSomething = i * i * i; >var end = new Date; // конец измерения alert( "Цикл занял " + (end - start) + " ms" );
Бенчмаркинг
Допустим, у нас есть несколько вариантов решения задачи, каждый описан функцией.
Как узнать, какой быстрее?
Для примера возьмём две функции, которые бегают по массиву:
function walkIn(arr) < for (var key in arr) arr[key]++ >function walkLength(arr)
Чтобы померить, какая из них быстрее, нельзя запустить один раз walkIn , один раз walkLength и замерить разницу. Одноразовый запуск ненадёжен, любая мини-помеха исказит результат.
Для правильного бенчмаркинга функция запускается много раз, чтобы сам тест занял существенное время. Это сведёт влияние помех к минимуму. Сложную функцию можно запускать 100 раз, простую – 1000 раз…
Померяем, какая из функций быстрее:
var arr = []; for (var i = 0; i < 1000; i++) arr[i] = 0; function walkIn(arr) < for (var key in arr) arr[key]++; >function walkLength(arr) < for (var i = 0; i < arr.length; i++) arr[i]++; >function bench(f) < var date = new Date(); for (var i = 0; i < 10000; i++) f(arr); return new Date() - date; >alert( 'Время walkIn: ' + bench(walkIn) + 'мс' ); alert( 'Время walkLength: ' + bench(walkLength) + 'мс' );
Теперь представим себе, что во время первого бенчмаркинга bench(walkIn) компьютер что-то делал параллельно важное (вдруг) и это занимало ресурсы, а во время второго – перестал. Реальная ситуация? Конечно реальна, особенно на современных ОС, где много процессов одновременно.
Гораздо более надёжные результаты можно получить, если весь пакет тестов прогнать много раз.
var arr = []; for (var i = 0; i < 1000; i++) arr[i] = 0; function walkIn(arr) < for (var key in arr) arr[key]++; >function walkLength(arr) < for (var i = 0; i < arr.length; i++) arr[i]++; >function bench(f) < var date = new Date(); for (var i = 0; i < 1000; i++) f(arr); return new Date() - date; >// bench для каждого теста запустим много раз, чередуя var timeIn = 0, timeLength = 0; for (var i = 0; i < 100; i++) < timeIn += bench(walkIn); timeLength += bench(walkLength); >alert( 'Время walkIn: ' + timeIn + 'мс' ); alert( 'Время walkLength: ' + timeLength + 'мс' );
Более точное время с performance.now()
В современных браузерах (кроме IE9-) вызов performance.now() возвращает количество миллисекунд, прошедшее с начала загрузки страницы. Причём именно с самого начала, до того, как загрузился HTML-файл, если точнее – с момента выгрузки предыдущей страницы из памяти.
Так что это время включает в себя всё, включая начальное обращение к серверу.
Его можно посмотреть в любом месте страницы, даже в , чтобы узнать, сколько времени потребовалось браузеру, чтобы до него добраться, включая загрузку HTML.
Возвращаемое значение измеряется в миллисекундах, но дополнительно имеет точность 3 знака после запятой (до миллионных долей секунды!), поэтому можно использовать его и для более точного бенчмаркинга в том числе.
console.time(метка) и console.timeEnd(метка)
Для измерения с одновременным выводом результатов в консоли есть методы:
- console.time(метка) – включить внутренний хронометр браузера с меткой.
- console.timeEnd(метка) – выключить внутренний хронометр браузера с меткой и вывести результат.
Параметр «метка» используется для идентификации таймера, чтобы можно было делать много замеров одновременно и даже вкладывать измерения друг в друга.
В коде ниже таймеры walkIn , walkLength – конкретные тесты, а таймер «All Benchmarks» – время «на всё про всё»:
var arr = []; for (var i = 0; i < 1000; i++) arr[i] = 0; function walkIn(arr) < for (var key in arr) arr[key]++; >function walkLength(arr) < for (var i = 0; i < arr.length; i++) arr[i]++; >function bench(f) < for (var i = 0; i < 10000; i++) f(arr); >console.time("All Benchmarks"); console.time("walkIn"); bench(walkIn); console.timeEnd("walkIn"); console.time("walkLength"); bench(walkLength); console.timeEnd("walkLength"); console.timeEnd("All Benchmarks");
При запуске этого примера нужно открыть консоль, иначе вы ничего не увидите.
Внимание, оптимизатор!
Современные интерпретаторы JavaScript делают массу оптимизаций, например:
- Автоматически выносят инвариант, то есть постоянное в цикле значение типа arr.length , за пределы цикла.
- Стараются понять, значения какого типа хранит данная переменная или массив, какую структуру имеет объект и, исходя из этого, оптимизировать внутренние алгоритмы.
- Выполняют простейшие операции, например сложение явно заданных чисел и строк, на этапе компиляции.
- Могут обнаружить, что некий код, например присваивание к неиспользуемой локальной переменной, ни на что не влияет и вообще исключить его из выполнения, хотя делают это редко.
Эти оптимизации могут влиять на результаты тестов, поэтому измерять скорость базовых операций JavaScript («проводить микробенчмаркинг») до того, как вы изучите внутренности JavaScript-интерпретаторов и поймёте, что они реально делают на таком коде, не рекомендуется.
Форматирование и вывод дат
Во всех браузерах, кроме IE10-, поддерживается новый стандарт Ecma 402, который добавляет специальные методы для форматирования дат.
Это делается вызовом date.toLocaleString(локаль, опции) , в котором можно задать много настроек. Он позволяет указать, какие параметры даты нужно вывести, и ряд настроек вывода, после чего интерпретатор сам сформирует строку.
Пример с почти всеми параметрами даты и русским, затем английским (США) форматированием:
var date = new Date(2014, 11, 31, 12, 30, 0); var options = < era: 'long', year: 'numeric', month: 'long', day: 'numeric', weekday: 'long', timezone: 'UTC', hour: 'numeric', minute: 'numeric', second: 'numeric' >; alert( date.toLocaleString("ru", options) ); // среда, 31 декабря 2014 г. н.э. 12:30:00 alert( date.toLocaleString("en-US", options) ); // Wednesday, December 31, 2014 Anno Domini 12:30:00 PM
Вы сможете подробно узнать о них в статье Intl: интернационализация в JavaScript, которая посвящена этому стандарту.
Методы вывода без локализации:
toString() , toDateString() , toTimeString() Возвращают стандартное строчное представление, не заданное жёстко в стандарте, а зависящее от браузера. Единственное требование к нему – читаемость человеком. Метод toString возвращает дату целиком, toDateString() и toTimeString() – только дату и время соответственно.
var d = new Date(); alert( d.toString() ); // вывод, похожий на 'Wed Jan 26 2011 16:40:50 GMT+0300'
toUTCString() То же самое, что toString() , но дата в зоне UTC.
toISOString() Возвращает дату в формате ISO Детали формата будут далее. Поддерживается современными браузерами, не поддерживается IE8-.
var d = new Date(); alert( d.toISOString() ); // вывод, похожий на '2011-01-26T13:51:50.417Z'
Если хочется иметь большую гибкость и кросс-браузерность, то также можно воспользоваться специальной библиотекой, например 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 .
Метод Date.parse(str) разбирает строку str в таком формате и возвращает соответствующее ей количество миллисекунд. Если это невозможно, Date.parse возвращает NaN .
var msUTC = Date.parse('2012-01-26T13:51:50.417Z'); // зона UTC alert( msUTC ); // 1327571510417 (число миллисекунд)
С таймзоной -07:00 GMT :
var ms = Date.parse('2012-01-26T13:51:50.417-07:00'); alert( ms ); // 1327611110417 (число миллисекунд)
Формат дат для IE8-
До появления спецификации ECMAScript 5 формат не был стандартизован, и браузеры, включая IE8-, имели свои собственные форматы дат. Частично, эти форматы пересекаются.
Например, код ниже работает везде, включая старые IE:
var ms = Date.parse("January 26, 2011 13:51:50"); alert( ms );
Вы также можете почитать о старых форматах IE в документации к методу MSDN Date.parse.
Конечно же, сейчас лучше использовать современный формат. Если же нужна поддержка IE8-, то метод Date.parse , как и ряд других современных методов, добавляется библиотекой es5-shim.
Метод Date.now()
Метод Date.now() возвращает дату сразу в виде миллисекунд.
Технически, он аналогичен вызову +new Date() , но в отличие от него не создаёт промежуточный объект даты, а поэтому – во много раз быстрее.
Его использование особенно рекомендуется там, где производительность при работе с датами критична. Обычно это не на веб-страницах, а, к примеру, в разработке игр на JavaScript.
Итого
- Дата и время представлены в JavaScript одним объектом: Date. Создать «только время» при этом нельзя, оно должно быть с датой. Список методов Date вы можете найти в справочнике Date или выше.
- Отсчёт месяцев начинается с нуля.
- Отсчёт дней недели (для getDay() ) тоже начинается с нуля (и это воскресенье).
- Объект Date удобен тем, что автокорректируется. Благодаря этому легко сдвигать даты.
- При преобразовании к числу объект Date даёт количество миллисекунд, прошедших с 1 января 1970 UTC. Побочное следствие – даты можно вычитать, результатом будет разница в миллисекундах.
- Для получения текущей даты в миллисекундах лучше использовать Date.now() , чтобы не создавать лишний объект Date (кроме IE8-)
- Для бенчмаркинга лучше использовать performance.now() (кроме IE9-), он в 1000 раз точнее.
Задачи
Вывести дату в формате дд.мм.гг
важность: 3
Напишите функцию formatDate(date) , которая выводит дату date в формате дд.мм.гг :
var d = new Date(2014, 0, 30); // 30 января 2014 alert( formatDate(d) ); // '30.01.14'
P.S. Обратите внимание, ведущие нули должны присутствовать, то есть 1 января 2001 должно быть 01.01.01, а не 1.1.1.
Получим компоненты один за другим.
-
День можно получить как date.getDate() . При необходимости добавим ведущий ноль:
var dd = date.getDate(); if (dd < 10) dd = '0' + dd;
var mm = date.getMonth() + 1; // месяц 1-12 if (mm < 10) mm = '0' + mm;
var yy = date.getFullYear() % 100; if (yy < 10) yy = '0' + yy;
Как получить текущую дату и время в Python
Регистрация, сохранение записей в базе данных и доступ к файлам - все это общие задачи, над которыми работает программист. В каждом из этих случаев дата и время играют важную роль в сохранении значения и целостности данных. Программистам часто приходится взаимодействовать с датой и временем.
В этой статье мы узнаем, как получить текущую дату и время, используя встроенный в Python модуль datetime. С помощью этого модуля мы можем получить все соответствующие данные в одном объекте или извлечь дату и время отдельно.
Мы также узнаем, как настроить дату и время для разных часовых поясов. Наконец, мы рассмотрим преобразование объектов datetime в популярные метки времени Unix или Epoch.
Получение текущей даты и времени с datetime
Модуль datetime содержит различные классы, чтобы получить информацию о дате и времени:
- datetime.date : Хранит день, месяц и год
- datetime.time : Хранит время в часах, минутах, секундах и микросекундах. Эта информация не зависит от даты
- datetime.datetime : Хранит атрибуты date и time
Получим текущую дату и время с объектом datetime.datetime , так как из него легче извлечь объекты date и time . Для начала давайте импортируем модуль datetime :
from datetime import datetime
Поначалу это выглядит странно, но мы получаем класс datetime из модуля datetime , это две разные вещи.
Мы можем использовать функцию now() , чтобы получить объект с текущей датой и временем:
current_datetime = datetime.now() print(current_datetime)
Запуск этого файла даст нам следующий вывод:
2019-12-13 12:18:18.290623
Функция now() дала нам объект со всей датой и временем его создания. Когда мы его печатаем, Python автоматически форматирует объект в строку, чтобы люди могли его легко прочитать.
Вы можете получить отдельные атрибуты даты и времени следующим образом:
print(current_datetime.year) # 2019 print(current_datetime.month) # 12 print(current_datetime.day) # 13 print(current_datetime.hour) # 12 print(current_datetime.minute) # 18 print(current_datetime.second) # 18 print(current_datetime.microsecond) # 290623
Метод now() идеально подходит для захвата текущего времени и даты. Однако, это излишне, когда вы заботитесь только о дате или времени, но не обоих. Как мы можем получить только информацию о дате?
Получение текущей даты
Есть два способа получить текущую дату в Python. В консоли Python мы можем получить дату из объекта datetime с помощью метода date() :
>>> from datetime import datetime >>> current_date = datetime.now().date() >>> print(current_date) 2019-12-13
Тем не менее, это кажется пустой тратой на инициализацию объекта datetime только для захвата даты. Альтернативой может быть использование метода today() класса date :
>>> from datetime import date >>> current_date = date.today() >>> print(current_date) 2019-12-13
Класс datetime.date представляет собой календарную дату. Его атрибуты year , month и day могут быть доступны так же, как мы обращаемся к ним в объекте datetime .
Например, этот оператор print получает каждый атрибут, а также использует метод weekday() для получения дня недели:
>>> print("It's the %dth day of the week, %dth day of the %dth month of the %dth year" % . (current_date.weekday()+1, current_date.day, current_date.month, current_date.year)) It's the 5th day of the week, 13th day of the 12th month of the 2019th year
Примечание: Метод weekday() возвращает целое число от 0 до 6 для представления дня недели. 0 соответствует понедельнику. Поэтому в нашем примере мы добавили 1, чтобы напечатать 5-й день недели (пятница), хотя метод weekday() вернул 4.
Теперь, когда мы можем получить текущую дату самостоятельно, давайте посмотрим, как мы можем получить текущее время
Получение текущего времени
Мы фиксируем текущее время от объекта datetime , используя метод time() :
>>> from datetime import datetime >>> current_time = datetime.now().time() >>> print(current_time) 12:18:18.290623
В отличие от получения дат, здесь нет ярлыка для непосредственного отображения текущего времени. Класс datetime.time представляет собой понятие времени как в часах, минутах, секундах и микросекунд - все, что меньше, чем один день.
Как и объект datetime , мы можем получить доступ к его атрибутам напрямую. Вот пример, как мы печатаем current_time в предложении:
>>> print("It's %d o'clock. To be exact, it's %d:%d and %d seconds with %d microseconds" % . (current_time.hour, current_time.hour, current_time.minute, current_time.second, current_time.microsecond)) It's 12 o'clock. To be exact, it's 12:18 and 18 seconds with 290623 microseconds
По умолчанию функция now() возвращает время вашего местного часового пояса. Что если нам нужно будет преобразовать его в другой, который был установлен в настройках пользователя? Давайте посмотрим, как мы можем предоставить информацию о часовом поясе для получения локализованных объектов time .
Получение текущей даты и времени в другом часовом поясе
Метод now() принимает временную зону в качестве аргумента, так что объект datetime генерируется соответствующим образом. Во-первых, нам нужно получить данные о часовом поясе через библиотеку pytz.
Установите библиотеку pytz :
$ pip3 install pytz
Теперь давайте используя pytz получим текущую дату и время, если бы мы были в Берлине:
>>> import pytz >>> from datetime import datetime >>> tz = pytz.timezone('Europe/Berlin') >>> berlin_current_datetime = datetime.now(tz) >>> print(berlin_current_datetime) 2019-12-14 00:20:50.840350+01:00
berlin_current_datetime будет объектом datetime со всеми свойствами и функциями, которые мы видели ранее, но теперь он полностью соответствует часовому поясу Берлина.
Если вы хотите узнать время в UTC, вы можете использовать модуль pytz , как и раньше:
>>> import pytz >>> from datetime import datetime >>> utc_current_datetime = datetime.now(pytz.timezone("UTC")) >>> print(utc_current_datetime) 2019-12-13 23:20:50.840350+00:00
Кроме того, для времени UTC вам не нужно использовать модуль pytz вообще. Модуль datetime имеет свойство timezone , которое может быть использовано, как в примере:
>>> from datetime import datetime, timezone >>> utc_current_datetime = datetime.now(timezone.utc) >>> print(utc_current_datetime) 2019-12-13 23:20:50.840350+00:00
Теперь, когда мы можем преобразовать наши даты и время в разные часовые пояса, давайте посмотрим, как мы можем преобразовать его в один из наиболее широко используемых форматов в вычислениях - временные метки Unix.
Преобразование меток времени в даты и время
Компьютерные системы измеряют время на основе количества секунд, прошедших с начала эпохи Unix, то есть 00:00:00 UTC 1 января 1970 года. Приложения, базы данных и протоколы обычно используют временную метку для отображения времени.
Вы можете получить текущую метку времени в Python, используя модуль time :
>>> import time >>> print(time.time()) 1576280665.0915806
Функция time.time() возвращает число с плавающей запятой с меткой времени Unix. Вы можете преобразовать метку времени в объект datetime , используя функцию fromtimestamp() :
>>> from datetime import datetime >>> print(datetime.fromtimestamp(1576280665)) 2019-12-13 19:44:25
fromtimestamp() по умолчанию возвращает объект datetime в вашем часовом поясе. Вы можете указать часовой пояс в качестве второго аргумента, если хотите, чтобы он был локализован по-другому.
Например, чтобы преобразовать метку времени в объект datetime в формате UTC, вы можете сделать это:
>>> from datetime import datetime, timezone >>> print(datetime.fromtimestamp(1576280665, timezone.utc)) 2019-12-13 19:44:25+00:00
И наоборот, вы можете использовать метод timestamp() для преобразования объекта datetime в допустимую метку времени:
>>> from datetime import datetime, timezone >>> print(datetime.now(timezone.utc).timestamp()) 1577117555.940705
Вывод
Встроенная Python библиотека datetime позволяет нам получать текущую дату и время с помощью функции now() . Мы можем использовать возвращенный объект datetime , чтобы извлечь только часть даты или часть времени. Мы также можем получить текущую дату с помощью функции today() .
По умолчанию Python создает объекты datetime в нашем местном часовом поясе. Если мы используем библиотеку pytz , мы можем конвертировать даты и время в разные часовые пояса.
Наконец, мы использовали функцию fromtimestamp() для получения метки времени Unix для получения объекта datetime . Если у нас есть объект datetime , мы можем получить метку времени, используя его метод timestamp() .