Python 3 datetime
Содержание:
- Бенчмаркинг
- Обработка часового пояса в Python
- Использование сторонних библиотек
- Python TimeDelta
- Модуль datetime
- The strftime() Method
- Basic datetime objects usage:
- The time Module
- Linux Date Command with Examples
- Использование Date
- Пользовательское форматирование даты
- Переопределить часовой пояс
- Конвертер эпох
- Использование с другими командами
- Показать время последнего изменения файла
- Установите системное время и дату
- Структура DateTime
- Описание типа данных datetime
- Модуль time
- Объединение даты и времени
- Пример Python TimeDelta
- time.strftime
- Преобразование формата даты и времени в PHP
- Форматирование и перевод в строку
- Структура DateTime
- Computing time differences:
Бенчмаркинг
Будьте внимательны, если хотите точно протестировать производительность функции, которая зависит от процессора.
Например, сравним две функции, вычисляющие разницу между двумя датами: какая сработает быстрее?
Подобные вычисления, замеряющие производительность, также называют «бенчмарками» (benchmark).
Обе функции делают буквально одно и то же, только одна использует явный метод для получения даты в миллисекундах, а другая полагается на преобразование даты в число. Результат их работы всегда один и тот же.
Но какая функция быстрее?
Для начала можно запустить их много раз подряд и засечь разницу. В нашем случае функции очень простые, так что потребуется хотя бы 100000 повторений.
Проведём измерения:
Вот это да! Метод работает ощутимо быстрее! Всё потому, что не производится преобразование типов, и интерпретаторам такое намного легче оптимизировать.
Замечательно, это уже что-то. Но до хорошего бенчмарка нам ещё далеко.
Представьте, что при выполнении процессор параллельно делал что-то ещё, также потребляющее ресурсы. А к началу выполнения он это уже завершил.
Достаточно реалистичный сценарий в современных многопроцессорных операционных системах.
В итоге у первого бенчмарка окажется меньше ресурсов процессора, чем у второго. Это может исказить результаты.
Для получения наиболее достоверных результатов тестирования производительности весь набор бенчмарков нужно запускать по нескольку раз.
Например, так:
Современные интерпретаторы JavaScript начинают применять продвинутые оптимизации только к «горячему коду», выполняющемуся несколько раз (незачем оптимизировать то, что редко выполняется). Так что в примере выше первые запуски не оптимизированы должным образом. Нелишним будет добавить предварительный запуск для «разогрева»:
Будьте осторожны с микробенчмарками
Современные интерпретаторы JavaScript выполняют множество оптимизаций. Они могут повлиять на результаты «искусственных тестов» по сравнению с «нормальным использованием», особенно если мы тестируем что-то очень маленькое, например, работу оператора или встроенной функции. Поэтому если хотите серьёзно понять производительность, пожалуйста, изучите, как работают интерпретаторы JavaScript. И тогда вам, вероятно, уже не понадобятся микробенчмарки.
Отличный набор статей о V8 можно найти на http://mrale.ph.
Обработка часового пояса в Python
Предположим, вы работаете над проектом и должны отображать дату и время в зависимости от часового пояса пользователей. Вместо того, чтобы пытаться обрабатывать часовой пояс самостоятельно, мы предлагаем вам использовать модуль pytZ.
from datetime import datetime import pytz local = datetime.now() print("Local:", local.strftime("%m/%d/%Y, %H:%M:%S")) tz_NY = pytz.timezone('America/New_York') datetime_NY = datetime.now(tz_NY) print("NY:", datetime_NY.strftime("%m/%d/%Y, %H:%M:%S")) tz_London = pytz.timezone('Europe/London') datetime_London = datetime.now(tz_London) print("London:", datetime_London.strftime("%m/%d/%Y, %H:%M:%S"))
Когда вы запустите программу, результат будет примерно таким:
Здесь и — это объекты , содержащие текущую дату и время соответствующего часового пояса.
Использование сторонних библиотек
Модуль datetime в Python может преобразовывать все разные типы строк в объект. Но основная проблема в том, что для этого вам нужно создать соответствующую строку кода форматирования, которую может понять strptime. Создание этой строки требует времени и затрудняет чтение кода. Вместо этого мы можем использовать другие сторонние библиотеки, чтобы упростить задачу.
В некоторых случаях эти сторонние библиотеки также имеют лучшую встроенную поддержку для управления и сравнения даты и времени, а некоторые даже имеют встроенные часовые пояса, поэтому вам не нужно включать дополнительный пакет.
Давайте рассмотрим некоторые из этих библиотек в следующих разделах.
Python TimeDelta
Объект Python TimeDelta представляет собой продолжительность времени. Мы можем создать свой объект, используя следующий заводский метод.
datetime.timedelta(days=0, seconds=0, microseconds=0, milliseconds=0, minutes=0, hours=0, weeks=0)
Обратите внимание, что функция TimeDelta () принимает ключевые аргументы. Все аргументы являются необязательными и по умолчанию до 0
Аргументы могут быть целыми числами или поплавками и могут быть положительными или отрицательными.
Объект TimeDelta поддерживает математические операции, такие как добавление, вычитание, умножение и т. Д. Использование основных операторов, поэтому его очень легко использовать. Это в основном используется для получения объекта DateTime с какой-то датой и временем дельты.
Модуль datetime
Модуль datetime в Python, как вы, наверное, догадались, содержит методы, которые можно использовать для работы со значениями даты и времени. Чтобы использовать этот модуль, мы сначала импортируем его с помощью оператора импорта следующим образом:
import datetime
Мы можем представить значения времени с помощью класса time. Атрибуты для класса времени включают час, минуту, секунду и микросекунду.
Аргументы для класса времени необязательны. Хотя, если вы не укажете какой-либо аргумент, вы вернетесь к времени 0, что вряд ли будет тем, что вам нужно большую часть времени.
Например, чтобы инициализировать объект времени со значением 1 час, 10 минут, 20 секунд и 13 микросекунд, мы можем выполнить следующую команду:
t = datetime.time(1, 10, 20, 13)
Чтобы посмотреть время, воспользуемся функцией print:
print(t)
Вывод:
01:10:20.000013
Возможно, вам понадобится увидеть только час, минуту, секунду или микросекунду, вот как вы можете это сделать:
print('hour:', t.hour)
Вывод:
hour: 1
Минуты, секунды и микросекунды для указанного выше времени можно получить следующим образом:
print('Minutes:', t.minute) print('Seconds:', t.second) print('Microsecond:', t.microsecond)
Вывод:
Minutes: 10 Seconds: 20 Microseconds: 13
Значения календарной даты могут быть представлены через класс date. У экземпляров будут атрибуты года, месяца и дня.
Давайте вызовем метод today, чтобы увидеть сегодняшнюю дату:
import datetime today = datetime.date.today() print(today)
Вывод:
2018-09-15
Код вернет дату на сегодня, поэтому вывод, который вы увидите, будет зависеть от дня, когда вы запускаете вышеуказанный скрипт.
Теперь вызовем метод ctime, чтобы распечатать дату в другом формате:
print('ctime:', today.ctime())
Вывод:
ctime: Sat Sep 15 00:00:00 2018
Метод ctime использует более длинный формат даты и времени, чем в примерах, которые мы видели ранее. Этот метод в основном используется для преобразования времени Unix (количество секунд с 1 января 1970 г.) в строковый формат.
А вот как мы можем отобразить год, месяц и день, используя класс date:
print('Year:', today.year) print('Month:', today.month) print('Day :', today.day)
Вывод:
Year: 2018 Month: 9 Day : 15
The strftime() Method
The object has a method for formatting date objects into readable strings.
The method is called , and takes one parameter,
, to specify the format of the returned string:
Example
Display the name of the month:
import datetimex = datetime.datetime(2018, 6, 1)print(x.strftime(«%B»))
A reference of all the legal format codes:
Directive | Description | Example | Try it |
---|---|---|---|
%a | Weekday, short version | Wed | Try it » |
%A | Weekday, full version | Wednesday | Try it » |
%w | Weekday as a number 0-6, 0 is Sunday | 3 | Try it » |
%d | Day of month 01-31 | 31 | Try it » |
%b | Month name, short version | Dec | Try it » |
%B | Month name, full version | December | Try it » |
%m | Month as a number 01-12 | 12 | Try it » |
%y | Year, short version, without century | 18 | Try it » |
%Y | Year, full version | 2018 | Try it » |
%H | Hour 00-23 | 17 | Try it » |
%I | Hour 00-12 | 05 | Try it » |
%p | AM/PM | PM | Try it » |
%M | Minute 00-59 | 41 | Try it » |
%S | Second 00-59 | 08 | Try it » |
%f | Microsecond 000000-999999 | 548513 | Try it » |
%z | UTC offset | +0100 | |
%Z | Timezone | CST | |
%j | Day number of year 001-366 | 365 | Try it » |
%U | Week number of year, Sunday as the first day of week, 00-53 | 52 | Try it » |
%W | Week number of year, Monday as the first day of week, 00-53 | 52 | Try it » |
%c | Local version of date and time | Mon Dec 31 17:41:00 2018 | Try it » |
%C | Century | 20 | Try it » |
%x | Local version of date | 12/31/18 | Try it » |
%X | Local version of time | 17:41:00 | Try it » |
%% | A % character | % | Try it » |
%G | ISO 8601 year | 2018 | Try it » |
%u | ISO 8601 weekday (1-7) | 1 | Try it » |
%V | ISO 8601 weeknumber (01-53) | 01 | Try it » |
❮ Previous
Next ❯
Basic datetime objects usage:
The datetime module contains three primary types of objects — date, time, and datetime.
Date:
import datetime today = datetime.date.today() new_year = datetime.date(2019, 1, 1) print(new_year)
Output:
2019-01-01
Time:
import datetime #Time object noon = datetime.time(12, 0, 0) print(noon)
Output:
12:00:00
Date Time:
import datetime # Current datetime now = datetime.datetime.now() print(now)
Output:
2019-11-01 06:16:18.526734
Date Time:
import datetime # Datetime object millenium_turn = datetime.datetime(2019, 1, 1, 0, 0, 0) print(millenium_turn)
Output:
2019-01-01 00:00:00
The time Module
There is a popular time module available in Python which provides functions for working with times and for converting between representations. Here is the list of all available methods −
Sr.No. | Function with Description |
---|---|
1 |
time.altzone
The offset of the local DST timezone, in seconds west of UTC, if one is defined. This is negative if the local DST timezone is east of UTC (as in Western Europe, including the UK). Only use this if daylight is nonzero. |
2 |
time.asctime()
Accepts a time-tuple and returns a readable 24-character string such as ‘Tue Dec 11 18:07:14 2008’. |
3 |
time.clock( )
Returns the current CPU time as a floating-point number of seconds. To measure computational costs of different approaches, the value of time.clock is more useful than that of time.time(). |
4 |
time.ctime()
Like asctime(localtime(secs)) and without arguments is like asctime( ) |
5 |
time.gmtime()
Accepts an instant expressed in seconds since the epoch and returns a time-tuple t with the UTC time. Note : t.tm_isdst is always 0 |
6 |
time.localtime()
Accepts an instant expressed in seconds since the epoch and returns a time-tuple t with the local time (t.tm_isdst is 0 or 1, depending on whether DST applies to instant secs by local rules). |
7 |
time.mktime(tupletime)
Accepts an instant expressed as a time-tuple in local time and returns a floating-point value with the instant expressed in seconds since the epoch. |
8 |
time.sleep(secs)
Suspends the calling thread for secs seconds. |
9 |
time.strftime(fmt)
Accepts an instant expressed as a time-tuple in local time and returns a string representing the instant as specified by string fmt. |
10 |
time.strptime(str,fmt=’%a %b %d %H:%M:%S %Y’)
Parses str according to format string fmt and returns the instant in time-tuple format. |
11 |
time.time( )
Returns the current time instant, a floating-point number of seconds since the epoch. |
12 |
time.tzset()
Resets the time conversion rules used by the library routines. The environment variable TZ specifies how this is done. |
Let us go through the functions briefly −
There are following two important attributes available with time module −
Sr.No. | Attribute with Description |
---|---|
1 |
time.timezone Attribute time.timezone is the offset in seconds of the local time zone (without DST) from UTC (>0 in the Americas; <=0 in most of Europe, Asia, Africa). |
2 |
time.tzname Attribute time.tzname is a pair of locale-dependent strings, which are the names of the local time zone without and with DST, respectively. |
Linux Date Command with Examples
10 Мая 2020
|
Терминал
В этом руководстве мы рассмотрим основы date команды.
Команда отображает или устанавливает системную дату. Чаще всего он используется для печати даты и времени в разных форматах и для расчета будущих и прошлых дат.
Использование Date
Синтаксис команды следующий:
Чтобы отобразить текущее системное время и дату, используя форматирование по умолчанию, вызовите команду без каких-либо параметров и аргументов:
Выходные данные включают день недели, месяц, день месяца, время, часовой пояс и год:
Вывод команды может быть отформатирован с помощью последовательности символов управления форматом, перед которой стоит знак. Элементы управления форматом начинаются с символа и заменяются их значениями.
Символ будет заменен на год, месяц и день месяца:
Вот еще один пример:
Ниже приведен небольшой список некоторых наиболее распространенных символов форматирования:
- — Сокращенное название дня недели (например, понедельник)
- — Сокращенное полное название дня недели (например, понедельник)
- — Сокращенное название месяца (например, январь).
- — сокращенное длинное название месяца (например, январь)
- — день месяца (например, 01)
- — час (00..23)
- — час (01.12.12)
- — День года (001..366)
- — Месяц (01.12.12)
- — Минута (00..59)
- — Второй (00 .. 60)
- — день недели (1..7)
- — Полный год (например, 2019)
Чтобы получить полный список всех параметров форматирования, запустите или в своем терминале.
Пользовательское форматирование даты
Опция позволяет работать на дату конкретного. Вы можете указать дату в виде удобочитаемой строки даты, как показано ниже:
Использование пользовательского форматирования:
Строка даты принимает значения, такие как «завтра», «пятница», «последняя пятница», «следующая пятница», «следующий месяц», «следующая неделя» .. и т. Д.
Вы также можете использовать параметр строки даты, чтобы показать местное время для разных часовых поясов. Например, чтобы показать местное время 6:30 утра следующего понедельника на восточном побережье Австралии, введите:
Переопределить часовой пояс
Команда возвращает дату в системном часовом поясе по умолчанию . Чтобы использовать другой часовой пояс, установите переменную среды в желаемый часовой пояс.
Например, чтобы показать время в Мельбурне, введите:
Чтобы получить список всех доступных часовых поясов , вы можете либо перечислить файлы в каталоге, либо использовать команду.
Конвертер эпох
Команда может быть использована в качестве преобразователя Epoch. Время, или метки времени Unix, — это количество секунд, прошедших с 1 января 1970 года в 00:00:00 UTC.
Чтобы напечатать количество секунд от эпохи до текущего дня, вызовите с контролем формата:
Чтобы преобразовать секунды с начала эпохи в дату, установите секунды в виде строки даты с префиксом :
Использование с другими командами
Команда чаще всего используется для создания имен файлов, которые содержат текущее время и дату.
Команда ниже создаст файл резервной копии Mysql в следующем формате
Вы также можете использовать команду в своих сценариях оболочки. В приведенном ниже примере мы присваиваем выход к переменной:
Показать время последнего изменения файла
Команда с параметром показывает время последнего изменения файла. Например:
Если вы хотите изменить временную метку файла, используйте команду .
Установите системное время и дату
Установка системного времени и даты вручную с помощью этой команды не рекомендуется, поскольку в большинстве дистрибутивов Linux системные часы синхронизируются с помощью служб или .
Однако, если вы хотите установить системные часы вручную, вы можете использовать эту опцию. Например, если вы хотите установить дату и время 17:30, 01 июня 2019 г., введите:
Команда Linux отображает или устанавливает системную дату и время.
Структура DateTime
Значение DateTime определяет конкретную дату и время. Он включает Kind свойство, которое предоставляет ограниченные сведения о часовом поясе, к которому относится эта дата и время. Значение DateTimeKind , возвращаемое свойством Kind , указывает, представляет ли значение DateTime местное время (), время в формате UTC () или неопределенное время ().
DateTimeСтруктура подходит для приложений с одной или несколькими из следующих характеристик.
работают только с датами;
работают только со временем;
работают с абстрактными датами и временем;
работают с датами и временем, для которых отсутствуют сведения о часовом поясе;
работают только с датами и временем в формате UTC;
Получение сведений о дате и времени из источников за пределами .NET, таких как базы данных SQL. (как правило, информация о дате и времени хранится в этих источниках в простом формате, который совместим со структурой DateTime );
выполняют арифметические операции с датой и временем, но учитывают только общие результаты
Например, в операции сложения, которая добавляет шесть месяцев к определенным дате и времени, часто не важно, корректируется ли результат с учетом перехода на летнее время.
Кроме случая, когда определенное значение DateTime представляет время в формате UTC, значение даты и времени часто является неоднозначным или ограниченным в плане возможности переноса. Например, если значение DateTime представляет местное время, оно является переносимым внутри местного часового пояса (то есть если значение десериализуется в другой системе в том же часовом поясе, оно по-прежнему однозначно определяет конкретный момент времени). За пределами местного часового пояса значение DateTime может иметь несколько интерпретаций. Если свойство Kind имеет значение , значение даты и времени становится еще менее переносимым: в этом случае оно неоднозначно даже в том же часовом поясе и, возможно, даже на том же компьютере, на котором оно было впервые сериализовано. Значение DateTime однозначно идентифицирует момент времени независимо от времени системы или часового пояса, в котором оно используется, только если это значение представляет время в формате UTC.
Важно!
При сохранении или совместном использовании данных DateTime следует использовать формат UTC, а для свойства DateTime значения Kind должно быть задано значение .
Описание типа данных datetime
Property (Свойство) | Значение |
---|---|
Синтаксис | datetime |
Использование | DECLARE @MyDatetime datetime CREATE TABLE Таблица1 ( Столбец1 datetime ) |
Форматы строковых литералов по умолчанию (используется для клиента нижнего уровня) | Неприменимо |
Диапазон даты | С я января 1753 года до 31 декабря 9999 года |
Диапазон времени | От 00:00:00 до 23:59:590,997 |
Диапазон смещения часового пояса | None |
Диапазоны элементов | ГГГГ — четырехзначное число от 1753 до 9999, представляющее год. ММ обозначает 2 цифры, которые представляют месяц и принимают значения от 01 до 12. Обозначение ДД состоит из двух цифр, представляющих день указанного месяца, и принимает значения от 01 до 31 в зависимости от месяца. Обозначение чч состоит из двух цифр, представляющих час, и принимает значения от 00 до 23. Обозначение мм состоит из двух цифр, представляющих минуту, и принимает значения от 00 до 59. Обозначение сс состоит из двух цифр, представляющих секунду, и принимает значения от 00 до 59. Обозначение n* может содержать от нуля до трех цифр, представляющих доли секунды, и принимает значения от 0 до 999. |
Длина в символах | Минимально 19 позиций, максимально — 23 |
Объем памяти | 8 байт |
Точность | Округлено до приращения 0,000, 0,003 или 0,007 секунд |
Значение по умолчанию | 1900-01-01 00:00:00 |
Календарь | Григорианский (включает полный диапазон лет) |
Определяемая пользователем точность в долях секунды | Нет |
Учет и сохранение смещения часового пояса | Нет |
Учет перехода на летнее время | Нет |
Модуль time
Модуль time открывает разработчику Python доступ к нескольким связанным со временем функциям. Модуль основан на «эпохе», точке, с которой начинается время. Для систем Unix, эпоха началась в 1970 году. Чтобы узнать, какая эпоха в вашей системе, попробуйте запустить следующий код:
Python
import time
print(time.gmtime(0))
1 2 |
importtime print(time.gmtime()) |
Результат
Python
time.struct_time(tm_year=1970, tm_mon=1, tm_mday=1, tm_hour=0, tm_min=0, tm_sec=\
0, tm_wday=3, tm_yday=1, tm_isdst=0)
1 2 |
time.struct_time(tm_year=1970,tm_mon=1,tm_mday=1,tm_hour=,tm_min=,tm_sec=\ ,tm_wday=3,tm_yday=1,tm_isdst=) |
Я запустил его на Windows 7, которая также уверена в том, что начало времен датируется 1970м годом. В любом случае, в данном разделе мы ознакомимся со следующими функциями:
- time.ctime
- time.sleep
- time.strftime
- time.time
Приступим!
Объединение даты и времени
Используйте класс для хранения значений, состоящих из компонентов даты и времени. Как и в случае с , существует несколько удобных методов класса, позволяющих создавать экземпляры из других общих значений.
datetime_datetime.py
import datetime print('Now :', datetime.datetime.now()) print('Today :', datetime.datetime.today()) print('UTC Now:', datetime.datetime.utcnow()) print() FIELDS d datetime.datetime.now() for attr in FIELDS: print('{:15}: {}'.format(attr, getattr(d, attr)))
Как и следовало ожидать, экземпляр имеет все атрибуты как объекта , так и объекта .
$ python3 datetime_datetime.py Now : 2018-12-09 10:46:30.494767 Today : 2018-12-09 10:46:30.494806 UTC Now: 2018-12-09 15:46:30.494812 year : 2018 month : 12 day : 9 hour : 10 minute : 46 second : 30 microsecond : 495051
Как и в случае с , предоставляет удобные методы класса для создания новых экземпляров. Он также включает и .
datetime_datetime_combine.py
import datetime t datetime.time(1, 2, 3) print('t :', t) d datetime.date.today() print('d :', d) dt datetime.datetime.combine(d, t) print('dt:', dt)
создает экземпляры из одного экземпляра и одного экземпляра .
$ python3 datetime_datetime_combine.py t : 01:02:03 d : 2018-12-09 dt: 2018-12-09 01:02:03
Пример Python TimeDelta
Давайте посмотрим на некоторые примеры получения будущих дат и прошлых дат, используя объект TimeDelta.
from datetime import datetime, timedelta current_datetime = datetime.now() # future dates one_year_future_date = current_datetime + timedelta(days=365) print('Current Date:', current_datetime) print('One year from now Date:', one_year_future_date) # past dates three_days_before_date = current_datetime - timedelta(days=3) print('Three days before Date:', three_days_before_date)
Выход:
Current Date: 2018-09-18 12:33:30.656394 One year from now Date: 2019-09-18 12:33:30.656394 Three days before Date: 2018-09-15 12:33:30.656394
time.strftime
Модуль time имеет функцию strftime, которая работает по схожему с версией datetime принципу. Разница заключается, главным образом, в том, что именно она принимает для ввода: кортеж, или объект struct_time, вроде тех, которые возвращаются после вызова time.gmtime() или time.localtime(). Вот небольшой пример:
Python
import time
a = time.strftime(«%Y-%m-%d-%H.%M.%S», time.localtime())
print(a) # ‘2017-04-05-00.11.20’
1 2 3 4 |
importtime a=time.strftime(«%Y-%m-%d-%H.%M.%S»,time.localtime()) print(a)# ‘2017-04-05-00.11.20’ |
Этот код очень похож на код временной отметки, который мы создавали в разделе datetime. На мой взгляд, метод datetime более интуитивен при создании объекта datetime.datetime а затем при вызове его метода strftime в том формате, который вам более удобен. С модулем time, вам нужно передать формат и кортеж времени. На самом деле выбор за вами, каким именно способом вам будет удобнее решить вашу задачу.
Преобразование формата даты и времени в PHP
Простейший механизм, позволяющий преобразовать числовое значение даты на более понятные значения, предоставляется функцией:
array getdate()
Она возвращает ассоциативный массив, содержащий информацию о дате. Если параметр timestamp не указан, будут возвращены сведения о текущем времени. Этот массив содержит следующие значения:
seconds | секунды (0-59) |
minutes | минуты (0-59) |
hours | часы (0-23) |
mday | день месяца (1-31) |
wday | день недели (0-6), начиная с воскресенья |
mon | месяц (1-12) |
year | год |
yday | день года (0-365) |
weekday | название дня недели (например, Monday) |
month | название месяца (например, January) |
количество секунд, прошедших с начала Эпохи Unix |
Полученный массив, позволяет вывести значения нужном виде:
$date = 1418372345; // исходное дата и время 12.12.2014 11:19:05 $date_mas = getdate($date); echo $date_mas . ' . ' . $date_mas . ' . ' . $date_mas; // 12.12.2014
Так же для преобразования формата даты и времени можно воспользоваться функцией:
string date(string $template )
Она предназначена для получения текущей даты unix timestamp в нужном формате. Строковый параметр $template определяет формат вывода. Параметром $unix_timestamp можно задать, с каким значением времени производится работа. Он необязательный, поэтому, если его не указать, будет использоваться текущая дата и время.
Формат задается следующими значениями:
a | «до» и «после» полудня: «am» или «pm» |
A | «до» и «после» полудня заглавными буквами: «AM» или «PM» |
d | день месяца 2 цифрами (если меньше 10, на первом месте ноль) (от 01 до 31) |
D | день недели 3 буквами. Например, «Mon» (понедельник) |
j | день месяца, 1-2 цифры без начальных нулей (от 1 до 31) |
F | название месяца. Например, «January» |
h | час, 12-часовой формат (от 01 до 12) |
H | час, 24-часовой формат (от 00 до 23) |
g | час, 12-часовой формат без нулей (от 1 до 12) |
G | час, 24-часовой формат без нулей (от 0 до 23) |
i | минуты (от 00 до 59) |
I (заглавная i) | 1, если действует переход на летнее время, иначе 0 |
L | 1, если год високосный, или 0 если не високосный |
B | время в формате Интернет-времени (альтернативной системы отсчета времени суток) (от 000 до 999) |
T | временная зона компьютера. Например, MDT |
l (строчная L) | день недели. Например, «Monday» |
m | месяц, две цифры с нулями (от 01 до 12) |
n | месяц, одна-две цифры без нулей (от 1 до 12) |
M | сокращенное наименование месяца. Например, «Jan» |
t | число дней в указанном месяце (от 28 до 31) |
s | секунды (от 0 до 59) |
S | англоязычный порядковый суффикс числа из двух букв («st», «nd», «rd» или «th») |
U | целое число секунд, прошедших с момента начала эпохи UNIX |
y | год, цифровой, 2 цифры (14) |
Y | год, цифровой, 4 цифры (2014) |
z | порядковое число дня в году (от 0 до 365) |
Z | смешение временной зоны в секундах (от -43200 до 43200) |
N | порядковый номер дня недели от 1 (понедельник) до 7 (воскресенье) в соответствии со стандартом ISO-8601, (добавлен в версии PHP 5.1.0) |
w | порядковый номер дня недели от 0 (воскресенье) до 6 (суббота) |
W | порядковый номер недели года в соответствии со стандартом ISO-8601; недели начинаются с понедельника (добавлено в версии PHP 4.1.0) |
o | номер года в соответствии со стандартом ISO-8601. Имеет то же значение, что и Y, кроме случая, когда номер недели ISO (W) принадлежит предыдущему или следующему году; тогда будет использован год этой недели. (добавлен в версии PHP 5.1.0) |
e | код шкалы временной зоны. Например: UTC, GMT, Atlantic/Azores (добавлен в версии PHP 5.1.0) |
O | разница с временем по Гринвичу, в часах. Например: +0200 |
P | разница с временем по Гринвичу с двоеточием между часами и минутами. Например: +02:00 (добавлено в версии PHP 5.1.3) |
c | дата в формате стандарта ISO 8601. Например, 2014-12-12T15:19:21+00:00 (добавлено в PHP 5) |
r | дата в формате » RFC 2822. Например: Thu, 21 Dec 2000 16:01:07 +0200 |
U | количество секунд, прошедших с начала Эпохи Unix (The Unix Epoch, 1 января 1970 00:00:00 GMT) |
Как видно из списка, с помощью этой функции можно получить очень много полезных данных о дате. Например:
$date = 1418372345; // исходное дата и время 12.12.2014 11:19:05 echo date('d.m.Y', $date); // 12.12.2014 (дата) echo date('H:i:s', $date); // 11:19:05 (время) echo date('H:i', $date); // 11:19 (время) echo date('t', $date); // 31 (число дней в месяце) echo date('z', $date); // 345 (порядковый номер дня в году) echo date('l dS \of F Y h:i:s A', $date); // Friday 12th of December 2014 11:19:05 AM
Другие символы, входящие в шаблон, будут выведены в строке как есть. Если же потребуется ввести символ, который используется в функции как код формата, перед ними вставляется символ «\». Для значения «\n» (символ перехода на новую строку), следует указать «\\n». Таким образом, можно делать вывод целого сообщения, содержащего сведения о дате и времени:
echo date('Сегодня z-й день Y-го года', $date); // Сегодня 345-й день 2014-го года
Форматирование и перевод в строку
Для получение части даты или времени можно использовать следующие атрибуты:
- year
- month
- day
- weekday
- hour
- minute
- second
Так же есть метод strftime, который форматирует даты в нужном формате в строку. Например так мы получим дату в формате, который используется у нас:
Где:
- %d — день месяца с 1 по 31;
- %m — месяц с 1 по 12;
- %Y — год;
- %H — час в формате 0-24;
- %M — минуты;
- %S — секунды.
Таким же способом можно получить время и дату:
- %c — время и дата;
- %x — дата;
- %X — время.
Обратите внимание, что таким способом мы преобразуем объект класса datetime в строку и мы больше не сможем использовать методы по работе с датой (например сравнение):
Мы получим ошибку так как уже работаем со строкой:
AttributeError: ‘str’ object has no attribute ‘day’
Выше описаны основные возможности форматирования используя метод strftime(), но их, конечно, больше.
Получения дня недели и название месяца
Можно получить название дня недели или название. Численный вариант эквивалентен следующим значениям:
- 0 — Monday (Понедельник);
- 1 — Tuesday (Вторник);
- 2 — Wednesday (Среда);
- 3 — Thursday (Четверг);
- 4 — Friday (Пятница);
- 5 — Saturday (Суббота);
- 6 — Sunday (Воскресенье).
Следующий пример вернет день недели в виде числа:
Или получить название:
Где:
- %A — полное название дня недели;
- %a — сокращенное название дня недели;
- %s — представление в виде числа.
Такой же принцип по работе с месяцами, где:
- %B — полное название месяца;
- %b — сокращенное название месяца;
- %m — месяц в виде числа.
Структура DateTime
Последнее обновление: 18.08.2016
Для работы с датами и временем в .NET предназначена структура DateTime. Она представляет дату и время от 00:00:00 1 января 0001 года
до 23:59:59 31 декабря 9999 года.
Для создания нового объекта DateTime также можно использовать конструктор. Пустой конструктор создает начальную дату:
DateTime date1 = new DateTime(); Console.WriteLine(date1); // 01.01.0001 0:00:00
То есть мы получим минимально возможное значение, которое также можно получить следующим образом:
Console.WriteLine(DateTime.MinValue);
Чтобы задать конкретную дату, нужно использовать один из конструкторов, принимающих параметры:
DateTime date1 = new DateTime(2015, 7, 20); // год - месяц - день Console.WriteLine(date1); // 20.07.2015 0:00:00
Установка времени:
DateTime date1 = new DateTime(2015, 7, 20, 18, 30, 25); // год - месяц - день - час - минута - секунда Console.WriteLine(date1); // 20.07.2015 18:30:25
Если необходимо получить текущую время и дату, то можно использовать ряд свойств DateTime:
Console.WriteLine(DateTime.Now); Console.WriteLine(DateTime.UtcNow); Console.WriteLine(DateTime.Today);
Консольный вывод:
20.07.2015 11:43:33 20.07.2015 8:43:33 20.07.2015 0:00:00
Свойство берет текущую дату и время компьютера, — дата и время относительно времени по
Гринвичу (GMT) и — только текущая дата.
При работе с датами надо учитывать, что по умолчанию для представления дат применяется григорианский календарь. Но что будет, если мы захотим получить день недели для
5 октября 1582 года:
DateTime someDate = new DateTime(1582, 10, 5); Console.WriteLine(someDate.DayOfWeek);
Консоль выстветит значение Tuesday, то есть вторник. Однако, как может быть известно из истории, впервые переход с юлианского календаря на григорианский
состоялся в октябре 1582 года. Тогда после даты 4 октября (четверг) (еще по юлианскому календарю) сразу перешли к 15 октября (пятница)(уже по григорианскому календарю).
Таким образом, фактически выкинули 10 дней. То есть после 4 октября шло 15 октября.
В большинстве случаев данный факт вряд ли как-то повлияет на вычисления, однако при работе с очень давними датами данный аспект следует учитывать.
Операции с DateTime
Основные операции со структурой DateTime связаны со сложением или вычитанием дат. Например, надо к некоторой дате прибавить или, наоборот,
отнять несколько дней.
Для добавления дат используется ряд методов:
-
: добавляет к дате значение TimeSpan
-
: добавляет к текущей дате несколько дней
-
: добавляет к текущей дате несколько часов
-
: добавляет к текущей дате несколько минут
-
: добавляет к текущей дате несколько месяцев
-
: добавляет к текущей дате несколько лет
Например, добавим к некоторой дате 3 часа:
DateTime date1 = new DateTime(2015, 7, 20, 18, 30, 25); // 20.07.2015 18:30:25 Console.WriteLine(date1.AddHours(3)); // 20.07.2015 21:30:25
Для вычитания дат используется метод Substract(DateTime date):
DateTime date1 = new DateTime(2015, 7, 20, 18, 30, 25); // 20.07.2015 18:30:25 DateTime date2 = new DateTime(2015, 7, 20, 15, 30, 25); // 20.07.2015 15:30:25 Console.WriteLine(date1.Subtract(date2)); // 03:00:00
Здесь даты различаются на три часа, поэтому результатом будет дата «03:00:00».
Метод Substract не имеет возможностей для отдельного вычитания дней, часов и так далее. Но это и не надо, так как мы можем передавать в метод
AddDays() и другие методы добавления отрицательные значения:
// вычтем три часа DateTime date1 = new DateTime(2015, 7, 20, 18, 30, 25); // 20.07.2015 18:30:25 Console.WriteLine(date1.AddHours(-3)); // 20.07.2015 15:30:25
Кроме операций сложения и вычитания еще есть ряд методов форматирования дат:
DateTime date1 = new DateTime(2015, 7, 20, 18, 30, 25); Console.WriteLine(date1.ToLocalTime()); // 20.07.2015 21:30:25 Console.WriteLine(date1.ToUniversalTime()); // 20.07.2015 15:30:25 Console.WriteLine(date1.ToLongDateString()); // 20 июля 2015 г. Console.WriteLine(date1.ToShortDateString()); // 20.07.2015 Console.WriteLine(date1.ToLongTimeString()); // 18:30:25 Console.WriteLine(date1.ToShortTimeString()); // 18:30
Метод преобразует время UTC в локальное время, добавляя смещение относительно времени по Гринвичу.
Метод , наоборот, преобразует локальное время во время UTC, то есть вычитает смещение относительно времени по Гринвичу.
Остальные методы преобразуют дату к определенному формату.
НазадВперед
Computing time differences:
The timedelta module is used to compute differences between times:
from datetime import datetime, timedelta now = datetime.now() then = datetime(2019, 5, 23) print(then)
Output:
2019-05-23 00:00:00
Specifying time is optional when creating a new datetime object
from datetime import datetime, timedelta now = datetime.now() then = datetime(2019, 5, 23) delta = now-then print(delta)
Output:
162 days, 9:10:42.599772
delta is of type timedelta:
from datetime import datetime, timedelta now = datetime.now() then = datetime(2019, 5, 23) delta = now-then print(delta.days) # 60 print(delta.seconds) # 40826
Output:
162 33296
To get n day’s after and n day’s before date we could use: