date — Форматирует системную датувремя


Содержание

16. Java — Дата и время

Java предоставляет класс Date, который доступен в пакете java.util, этот класс заключает в себе текущую дату и время.

Содержание

Конструкторы

Класс Date поддерживает два конструктора, которые показаны ниже.

Конструктор и описание
1 Date()
Этот конструктор инициализирует объект с текущей датой и временем.
2 Date(long millisec)
Этот конструктор принимает аргумент равный числу миллисекунд, истекших с полуночи 1 января 1970 г.

Методы класса Date

Ниже представлены методы класса Date.

Методы с описанием
1 boolean after(Date date)
Возвращает значение true, если вызывающий объект date содержит дату, которая раньше заданной даты, в противном случае он возвращает значение false.
2 boolean before(Date date)
Возвращает значение true, если вызывающий объект date содержит дату, более раннюю, чем заданная дата, в противном случае он возвращает значение false.
3 Object clone()
Дублирование вызывающего объекта date.
4 int compareTo(Date date)
Сравнивает значение вызывающего объекта с этой датой. Возвращает 0, если значения равны. Возвращает отрицательное значение, если объект вызова является более ранним, чем дата. Возвращает положительное значение, если объект вызова позже даты.
5 int compareTo(Object obj)
Работает точно так же compareTo(Date), если объект вызова имеет класс Date. В противном случае вызывает ClassCastException.
6 boolean equals(Object date)
Возвращает значение true, если вызывающий объект date содержит то же время и дату, которая указана в date, в противном случае он возвращает значение false.
7 long getTime()
Возвращает количество миллисекунд, истекших с 1 января 1970 года.
8 int hashCode()
Возвращает хэш-код для вызывающего объекта.
9 void setTime(long time)
Задает дату и время, соответствующие моменту времени, что представляет собой общее затраченное время в миллисекундах от полуночи 1 января 1970 года.
10 String toString()
Преобразует вызывающий объект date в строку и возвращает результат.

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

Получить текущую дату и время в Java достаточно не трудно. Вы можете использовать простой объект date вместе с методом toString(), чтобы вывести текущую дату и время следующим образом:

Получим следующий результат:

Сравнение дат

Существуют три способа в Java сравнить даты:

  • Можно использовать функцию getTime(), чтобы получить количество миллисекунд, прошедших с момента полуночи 1 января 1970, для обоих объектов, а затем сравнить эти два значения.
  • Вы можете использовать методы before(), after() и equals(). Поскольку 12 число месяца раньше 18 числа, например, new Date(99, 2, 12).before(new Date (99, 2, 18)) возвращает значение true.
  • Можно использовать метод compareTo(), который определяется сопоставимым интерфейсом и реализуется по дате.

Форматирование даты с помощью SimpleDateFormat

SimpleDateFormat — это конкретный класс для парсинга и форматирования даты в Java. SimpleDateFormat позволяет начать с выбора любых пользовательских шаблонов для форматирования даты и времени. Например:

Получим следующий результат:

Формат-коды SimpleDateFormat

Для того, чтобы задать в Java формат даты и времени, используйте строковый шаблон (регулярные выражения) с датой и временем. В этой модели все буквы ASCII зарезервированы как шаблон письма, которые определяются следующим образом:

Символ Описание Пример
G Обозначение эры н.э.
y Год из четырех цифр 2020
M Номер месяца года 11
d Число месяца 13
h Формат часа в A.M./P.M.(1

12)

7
H Формат часа(0

23)

19
m Минуты 30
s Секунды 45
S Миллисекунды 511
E День недели Вс
D Номер дня в году 318
F Номер дня недели в месяце 2 (второе воскресение в этом месяце)
w Номер неделя в году 46
W Номер недели в месяце 2
a Маркер A.M./P.M. AM
k Формат часа(1

24)

24
K Формат часа в A.M./P.M.(0

11)

z Часовой пояс FET (Дальневосточноевропейское время)
Выделение для текста Текст
» Одинарная кавычка

Форматирование даты с помощью printf

Формат даты и времени можно сделать без труда с помощью метода printf. Вы используете формат двух букв, начиная с t и заканчивая одним из символов в таблице, приведенных ниже. Например:

Получим следующий результат:

Было бы немного глупо, если Вы должны были бы поставить дату несколько раз для форматирования каждой части. По этой причине формат строки может указывать индекс аргумента для форматирования.

Индекс должен непосредственно следовать за % и завершаться $. Например:

Настройка даты и времени в Linux – команда date

Как это часто бывает, всё самое важное скрывается за самыми простыми вещами. Так и в случае с установкой/настройкой даты и времени в системе. Некорректные значения этих параметров запросто ломают логику работы многих приложений, особенно это касается тех систем, где на этом построены целые сервисы, такие как интернет-магазины, SCADA-системы на производстве и т. д. Поэтому так важно следить за корректными настройками времени, даты, языковых форматов, а также уметь все эти параметры настраивать. В системах Linux всё это позволяет выполнять команда date.

Синтаксис и основные опции

Согласно официальной информации, доступной из справочного руководства (команда man date), синтаксис команды date следующий:

Если дать команду date без аргументов или если аргументы начинаются с символа «+», то по-умолчанию будет выведено текущие значения даты и времени. В ином случае производится установка даты и времени, передаваемые в аргументах в каком-либо из форматов. Например, для установки времени введите команду

MM — Месяц
DD — День,
hh — часы в 24-часовом формате,
mm — минуты,
YYYY — 4 цифры года,
ss — секунды.

Прежде чем установить время проверьте правильность установки временной зоны.

Ниже мы боле подробно рассмотрим параметры ввода даты и времени.

Следующая команда выводит информацию о текущих дате и времени в форматированном виде:

Как видно, символ «+» позволяет печатать установленные (текущие) значения, а следующее за ним выражение задаёт формат вывода этих значений. Шаблон подстановки «%n» здесь служит для переноса строки. Все остальные шаблоны подстановки используются для выборки соответствующих компонент времени: месяцы, дни, часы, минуты и т. д. Само же выражение должно заключаться в кавычках, если в нём присутствуют пробельные символы.

Параметры CC, YY и .ss в синтаксисе date означают две последние цифры года, век и секунды (от 0 до 59) соответственно. И эти параметры не являются обязательными. Для того, чтобы устанавливать дату и время с помощью команды date, необходимы права суперпользователя.


В следующей таблице приводится описание основных опций команды date:

Опция Значение
-d, —date=STRING Вычисляет день недели для заданной даты в качестве STRING. Дата задаётся в формате ггммдд.
-f, —file=DATEFILE То же самое, что и -d, но для исходных данных используется содержимое из файла FILE.
-r, —reference=FILE Определяет время последней модификации файла FILE.
-s, —set=STRING Устанавливает время/дату, заданные строкой STRING.
-u, —utc, —universal Использование формата

Форматы ввода/вывода даты и времени

Для формата ввода даты/времени предусматриваются специальные элементы записи того или иного компонента даты/времени. В следующей таблице приводится описание этих элементов записи в виде пар букв, которым соответствуют составляющие даты и времени:

Элемент Описание
mm Минуты — от 0 до 59.
hh Часы — от 0 до 23.
DD Дни — от 0 до 28, 29, 30 и 31.
MM Месяцы — от 01 до 12.

Как уже можно было видеть, возвращаемые командой данные из её вывода можно форматировать произвольным способом, используя для этого специальные шаблоны подстановки или параметры форматирования. Они служат, как уже было отмечено выше, для выборки требуемых компонентов данных даты/времени из вывода команды date. Список этих параметров довольно длинный, но при этом его легко запомнить, поскольку наименования параметров довольно логичны. Следующая таблица отражает самые основные и часто используемые параметры форматирования:

Узнать время последнего изменения какого-либо файла:

Узнать день недели по его дате:

Вообще, команду date очень активно используют программисты для написания программного кода приложений, работающих с датой/временем, а также при написании скриптов для автоматизации некоторых процессов. Например, для автоматического наименования фалов, в имени которых содержится подстрока с датой его создания:

В результате будет создана копия файла settings.php под именем settings.php_back-070319. В данном случае используется директива $( ) для задания имени файла. Нужно заметить, что данный приём — очень мощный инструмент при работе в командной оболочке Linux.

Заключение

В заключение следует отметить отличную гибкость и большие возможности простой консольной утилиты, доступной по команде date, которая на первый взгляд не представляется заслуживающей внимания. Однако, команда date – это яркий пример «маленькой, но очень эффективной программы» в UNIX-подобных системах.

Если вы нашли ошибку, пожалуйста, выделите фрагмент текста и нажмите Ctrl+Enter.

Работа с датой и временем в MySQL

В этой статье мы рассмотрим основы работы с датой и временем в MySQL.

Формат даты и времени

MySQL date format поддерживает несколько форматов даты и времени. Их можно определить следующим образом:

DATE — хранит значение даты в виде ГГГГ-ММ-ДД. Например, 2008-10-23.
DATETIME — хранит значение даты и времени в виде ГГГГ-MM-ДД ЧЧ:ММ:СС. Например, 2008-10-23 10:37:22. Поддерживаемый диапазон дат и времени: 1000-01-01 00:00:00 до 9999-12-31 23:59:59
TIMESTAMP — похож на DATETIME с некоторыми различиями в зависимости от версии MySQL и режима, в котором работает сервер.

Создание полей даты и времени

Таблица, содержащая типы данных DATE и DATETIME , создается так же, как и другие столбцы. Например, мы можем создать новую таблицу под названием orders, которая содержит столбцы номера заказа, заказанного товара, даты заказа и даты доставки заказа:

Столбец ORDER_DATE — это поле типа MySQL DATE TIME , в которое мы записываем дату и время, когда был сделан заказ. Для даты доставки невозможно предсказать точное время, поэтому мы записываем только дату.

Форматы даты и времени

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

Например, все следующие форматы являются правильными:

Функции даты и времени

MySQL содержит множество функций, которые используются для обработки даты и времени. В приведенной ниже таблице представлен список наиболее часто используемых функций:

Функция Описание
ADDDATE() Добавляет дату.
ADDTIME() Добавляет время.
CONVERT_TZ() Конвертирует из одного часового пояса в другой.
CURDATE() Возвращает текущую дату.
CURTIME() Возвращает текущее системное время.
DATE_ADD() Добавляет одну дату к другой.
MySQL DATE_FORMAT () Задает указанный формат даты.
DATE() Извлекает часть даты из даты или выражения дата-время.
DATEDIFF() Вычитает одну дату из другой.
DAYNAME() Возвращает день недели.
DAYOFMONTH() Возвращает день месяца (1-31).
DAYOFWEEK() Возвращает индекс дня недели из аргумента.
DAYOFYEAR() Возвращает день года (1-366).
EXTRACT Извлекает часть даты.
FROM_DAYS() Преобразует номер дня в дату.
FROM_UNIXTIME() Задает формат даты в формате UNIX.
MySQL DATE_SUB () Вычитает одну дату из другой.
HOUR() Извлекает час.
LAST_DAY Возвращает последний день месяца для аргумента.
MAKEDATE() Создает дату из года и дня года.
MAKETIME () Возвращает значение времени.
MICROSECOND() Возвращает миллисекунды из аргумента.
MINUTE() Возвращает минуты из аргумента.
MONTH() Возвращает месяц из переданной даты.
MONTHNAME() Возвращает название месяца.
NOW() Возвращает текущую дату и время.
PERIOD_ADD() Добавляет интервал к месяцу-году.
PERIOD_DIFF() Возвращает количество месяцев между двумя периодами.
QUARTER() Возвращает четверть часа из переданной даты в качестве аргумента.
SEC_TO_TIME() Конвертирует секунды в формат ‘ЧЧ:MM:СС’.
SECOND() Возвращает секунду (0-59).
MySQL STR_TO_DATE () Преобразует строку в дату.
SUBTIME() Вычитает время.
SYSDATE() Возвращает время, в которое была выполнена функция.
TIME_FORMAT() Задает формат времени.
TIME_TO_SEC() Возвращает аргумент, преобразованный в секунды.
TIME() Выбирает часть времени из выражения, передаваемого в качестве аргумента.
TIMEDIFF() Вычитает время.
TIMESTAMP() С одним аргументом эта функция возвращает дату или выражение дата-время. С двумя аргументами возвращается сумма аргументов.
TIMESTAMPADD() Добавляет интервал к дате-времени.
TIMESTAMPDIFF() Вычитает интервал из даты — времени.
TO_DAYS() Возвращает аргумент даты, преобразованный в дни.
UNIX_TIMESTAMP() Извлекает дату-время в формате UNIX в формат, принимаемый MySQL.
UTC_DATE() Возвращает текущую дату по универсальному времени (UTC).
UTC_TIME() Возвращает текущее время по универсальному времени (UTC).
UTC_TIMESTAMP() Возвращает текущую дату-время по универсальному времени (UTC).
WEEK() Возвращает номер недели.
WEEKDAY() Возвращает индекс дня недели.
WEEKOFYEAR() Возвращает календарную неделю даты (1-53).
YEAR() Возвращает год.
YEARWEEK() Возвращает год и неделю.

Вы можете поэкспериментировать с этими функциями MySQL date format , даже не занося никаких данных в таблицу. Например:

Вы можете попробовать сочетание нескольких функций в одном запросе (например, чтобы найти день недели):
mysql> SELECT MONTHNAME(NOW());

Внесение значений даты и времени в столбцы таблицы

Рассмотрим, как вносятся значения date MySQL в таблицу. Чтобы продемонстрировать это, мы продолжим использовать таблицу orders , которую создали в начале статьи.

Мы начнем с добавления новой строки заказа. Значение поля order_no будет автоматически увеличиваться на 1, так что нам остается вставить значения order_item , дату создания заказа и дату доставки. Дата заказа — это время, в которое вставляется заказ, поэтому мы можем использовать функцию NOW() , чтобы внести в строку текущую дату и время.

Дата доставки — это период времени после даты заказа, которую мы можем вернуть, используя функцию MySQL DATE_ADD() , которая принимает в качестве аргументов дату начала ( в нашем случае NOW () ) и INTERVAL ( в нашем случае 14 дней ). Например:

Данный запрос создает заказ для указанного элемента с датой, временем выполнения заказа, и интервалом через две недели после этого в качестве даты доставки:

Точно так же можно заказать товар с датой доставки через два месяца:

Извлечение данных по дате и времени

В MySQL мы можем отфильтровать извлеченные данные в зависимости от даты и времени. Например, мы можем извлечь только те заказы, доставка которых запланирована на ноябрь:

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

Заключение

В этой статье мы рассмотрели форматы, используемые для определения даты и времени, и перечислили функции, используемые в для операций в MySQL с тип DATE . А также несколько примеров внесения и извлечения данных.

Данная публикация представляет собой перевод статьи « Working with Dates and Times in MySQL » , подготовленной дружной командой проекта Интернет-технологии.ру


Преобразование даты и времени в PL/SQL

Теперь, когда вы имеете представление о типах данных Oracle, предназначенных для работы с датой и временем, давайте посмотрим, как присваивать даты значениям переменных этих типов и как использовать такие значения в дальнейшем. Дата и время в понятной для человека форме представляются в виде символьных строк наподобие «5 марта 2009 года» и «10:30», так что речь пойдет о преобразовании значений даты/ времени в PL/SQL — приведении символьных строк в соответствие с внутренним представлением Oracle, и наоборот.

PL/SQL проверяет и хранит даты от 1 января 4712 года до н. э. до 31 декабря 9999 года н. э. (В документации Oracle указана максимальная дата 31 декабря 4712 года). Если ввести дату без времени (во многих приложениях не требуется отслеживать время, поэтому PL/SQL позволяет его не задавать), то время в таком значении по умолчанию будет равно полуночи (00:00:00).

База данных Oracle способна интерпретировать практически все известные форматы даты и времени. Эта возможность основана на использовании маски форматирования даты, которая представляет собой строку специальных символов, определяющих формат даты для Oracle.

В следующем разделе мы рассмотрим несколько разных масок форматирования даты. Полный список всех элементов форматирования масок приводится в приложении В.

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

Первой практической задачей, с которой вы столкнетесь при работе с датами, будет присваивание даты (или времени) переменной PL/SQL. Операция выполняется путем преобразования даты/времени во внутренний формат базы данных. Такие преобразования выполняются либо неявно, присваиванием символьной строки переменной типа даты/времени, либо явно, с помощью встроенных функций Oracle.

Неявное преобразование — вещь рискованная, и мы не рекомендуем на него полагаться. Пример неявного преобразования символьной строки при ее присваивании переменной типа DATE :

Такое преобразование зависит от установленного значения NLS_DATE_FORMAT . Оно будет успешно работать до тех пор, пока администратор базы данных не решит изменить это значение. Как только он это сделает, код перестанет функционировать. Нарушит работу кода и изменение значения параметра NLS_DATE_FORMAT на уровне сеанса.

Вместо того чтобы полагаться на неявные преобразования и установленное значение параметра NLS_DATE_FORMAT , лучше преобразовывать даты явно, с помощью встроенных функций Oracle — таких, как TO_DATE :

Обратите внимание на передачу форматной строки ‘dd-mon-yyyy’ во втором параметре вызова TO_DATE . Форматная строка управляет интерпретацией символов первого параметра функцией TO_DATE .

PL/SQL поддерживает следующие функции преобразования строк в дату и время:

  • TO_DATE(строка[, маска[, язык_nls]]) — преобразует символьную строку в значение типа DATE .
  • TO_DATE(число[, маска[, язык_nls]]) — преобразует строку, содержащую Юлианскую дату, в значение типа DATE .
  • TO_TIMESTAMP(строка[, маска[, язык_nls]]) — преобразует символьную строку в значение типа TIMESTAMP .
  • TO_TIMESTAMP_TZ(строка[, маска[, язык_nls]]) — преобразует символьную строку в значение типа TIMESTAMP WITH TIME ZONE . Функция также используется для преобразования к типу TIMESTAMP WITH LOCAL TIME ZONE.

Эти функции не только ясно показывают, что в коде выполняется преобразование, но и позволяют точно задать используемый формат даты/времени.

Вторая версия TO_DATE может использоваться только с маской форматирования J (Юлианская дата, то есть количество дней, прошедших с 1 января 4712 года до н. э.). Только в этом варианте использования TO_DATE в первом параметре может передаваться число.

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

  • строка — преобразуемая строковая переменная, литерал, именованная константа или выражение;
  • маска — маска форматирования, используемая для преобразования строки. По умолчанию в качестве маски используется значение параметра NLS_DATE_FORMAT .
  • язык_nls — необязательное обозначение языка, который должен использоваться для интерпретации имен и сокращений месяцев и дней в строке, в формате ‘NLS_DATE_LANGUAGE=язык’.

Здесь язык — один из языков, распознаваемых вашим экземпляром базы данных. За информацией о допустимых языках обращайтесь к руководству Oracle Globalization Support Guide.

Форматные элементы (см. приложение В) применяются при использовании функций семейства TO_ . Например, следующие вызовы TO_DATE и TO_TIMESTAMP преобразуют символьные строки разных форматов в значения DATE и TIMESTAMP :

Обратите внимание на представление долей секунд (.50) и на использование маски XFF . Элемент форматирования X определяет местоположение десятичного разделителя (в данном случае точки), отделяющего количество целых секунд от дробной части. Можно было бы просто поставить в этом месте точку (. FF ), но мы предпочли воспользоваться символом X , поскольку он указывает, что на этом месте должен находиться разделитель, соответствующей текущему значению параметра NLS_TERRITORY .

Ошибки Oracle из диапазона от ORA-01800 до ORA-01899 связаны с преобразованиями дат. Чтобы узнать о некоторых тонкостях обработки дат, просмотрите документацию по этим ошибкам и ознакомьтесь с описаниями их причин. Вот лишь некоторые из них:

  • Литерал даты, переданный TO_CHAR для преобразования в дату, не может быть длиннее 220 символов.
  • Одна маска форматирования не может одновременно содержать элемент даты юлианского календаря (J) и элемент дня года (DDD).
  • Маска не может содержать несколько элементов для одного компонента даты/времени. Например, маска YYYY-YYY-DD-MM недопустима, потому что она включает два элемента года, YYYY и YYY .
  • 24-часовой формат времени ( HH24 ) не может использоваться в маске одновременно с 12-часовым.

Как показывают предыдущие примеры, функция TO_TIMESTAMP_TZ может преобразовывать символьные строки с информацией часового пояса. И хотя часовые пояса на первый взгляд выглядят просто, в действительности все намного сложнее — вы убедитесь в этом в разделе «Часовые пояса».

Преобразование даты в строку

Присвоить переменной значение типа даты/времени — только полдела. Еще нужно прочитать его и представить в понятной для человека форме. Для этого в Oracle существует функция TO_CHAR .

Функция TO_CHAR предназначена для преобразования значения даты/времени в строку переменной длины. Она применяется и для типа DATE , и для всех типов семейства TIMESTAMP . Кроме того, она выполняет преобразование чисел в символьные строки. Синтаксис функции TO_CHAR :

Здесь входная_дата — символьная строка, представляющая значение даты/времени; маска — строка из одного или нескольких элементов формата; язык_nls — строка, задающая язык отображения даты. Параметры маска и язык_nls не являются обязательными.

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

Если маска не задана, по умолчанию используется формат даты, установленный для базы данных. Это формат ‘DD-MON-RR’, если только администратор не задал другой формат, изменив значение параметра NLS_DATE_FORMAT . Как упоминалось ранее, лучше не зависеть от неявных преобразований даты. Изменения серверных настроек NLS (а в клиентском коде — изменения клиентских настроек NLS ) приводят к появлению логических ошибок, если ваш код зависит от неявных преобразований. Если приложение всегда выполняет преобразования явно, такие ошибки исключены.

Несколько примеров использования функции TO_CHAR для преобразования даты:

  • Обратите внимание на два пробела между месяцем и днем, а также на начальный нуль перед номером месяца:
  • Для подавления пробелов и нулей используется элемент FM :
  • Обратите внимание на различие регистра в обозначении месяца в следующих двух примерах (при работе с форматами данных Oracle вы получаете в точности то, что запрашиваете):

  • На элемент форматирования TH не распространяются правила задания регистра. Даже если ввести его в нижнем регистре ( th ), то в выходной строке база данных будет использовать TH .
  • Вывод дня года, дня месяца и дня недели для заданной даты:
  • Нетривиальное форматирование для построения отчета:
  • Для переменных типа TIMESTAMP время можно задавать с точностью до миллисекунд:

Будьте внимательны при работе со значениями, включающими доли секунд. В маске форматирования доли секунды представляются элементом FF , и кто-то решит, что количество букв F должно соответствовать количеству десятичных цифр в выходной строке. Но это не так! Для обозначения от 1 до 9 десятичных цифр следует использовать конструкции FF1–FF9 . Например, в следующем блоке конструкция FF6 запрашивает вывод с точностью до шести десятичных цифр:

Обратите внимание на выполненное округление. Во входных данных было указано количество секунд 00.123456789. Значение было округлено (не усечено, а именно округлено) до шести цифр: 00,123457.

Ничего не стоит по ошибке задать неверный формат даты, и с появлением типа данных TIMESTAMP вероятность этого даже увеличилась. Некоторые элементы форматирования, использующиеся со значениями типа TIMESTAMP , не могут применяться со значениями типа DATE . Например, если попытаться преобразовать значения типа DATE в символьную строку с помощью элементов FF, TZH и TZM , получится следующее:

Сообщение об ошибке (формат даты не распознается) только сбивает с толку. Формат даты абсолютно нормален — проблема в том, что он применяется не к тому типу данных. Поэтому при получении такого сообщения следует проверить не только формат даты, но и тип данных, который вы собираетесь преобразовывать.

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

Возможное присутствие информации о часовом поясе несколько усложняет использование функции TO_TIMESTAMP_TZ по сравнению с функциями TO_DATE и TO_TIMESTAMP . Информация о часовом поясе задается одним из следующих способов:

  • Как положительное или отрицательное смещение в часах и минутах относительно времени UTC; например, значение –5:00 эквивалентно Восточному стандартному времени США. Значения смещения должны находиться в диапазоне от ?12:59 до +13:59.
  • В виде названия часового пояса, например: US/Eastern, US/Pacific и т. д.
  • В виде сочетания названия и сокращения часового пояса, например: US/Eastern EDT.

Рассмотрим несколько примеров. Начнем с простейшего случая, в котором часовой пояс вообще не указан:

Дата и время здесь определены как 31 декабря 1998 года, 8 часов 30 минут 15 с половиной секунд до полудня. Поскольку часовой пояс не указан, Oracle считает, что время относится к текущему часовому поясу. Если часовой пояс намеренно не указан, то программа получается менее выразительной, чем следует. Если приложение должно использовать часовой пояс сеанса (вместо явно заданного часового пояса), лучше сначала определить часовой пояс сеанса при помощи функции SESSIONTIMEZONE , а затем явно использовать его при вызове функции TO_TIMESTAMP_TZ . Явное выражение ваших намерений поможет разработчику (которым можете быть вы сами) разобраться в вашем коде два года спустя, при добавлении новых функций или исправлении ошибок.

Дата или время?

Учтите, что каждое значение даты/времени содержит как дату, так и время. Стоит вам забыть об этом, и в вашем коде появятся ошибки. Рассмотрим пример: допустим, я написал код PL/SQL, который должен быть выполнен 1 января 2015 года:

Запускаемая процедура должна изменить цены на предстоящий год, но вероятность добиться желаемого результата минимальна. Блок кода должен быть выполнен ровно в полночь, с точностью до секунды; дело в том, что SYSDATE вместе с датой возвращает время. Чтобы блок работал так, как задумано, следует усечь значение, возвращаемое функцией SYSDATE , до полуночи соответствующего дня:

Теперь в обеих сторонах сравнения указывается время суток, но этим временем является полночь. Функция TO_DATE также возвращает время суток, которое по умолчанию соответствует полуночи (то есть 00:00:00). Итак, в какое бы время 1 января 2015 года ни был выполнен этот блок, сравнение будет выполнено успешно, и процедура Apply2009PriceChange будет выполнена.

Функцию TRUNCATE также удобно использовать для удаления времени из временных штампов.

В следующем примере часовой пояс задается смещением в часах и минутах относительно UTC . Обратите внимание на элементы TZH и TZM , отмечающие, где во входной строке указывается смещение времени в часах и минутах:

В этом примере значение даты/времени интерпретируется как Восточное стандартное время США (независимо от часового пояса сеанса).

Следующий пример показывает, как задать часовой пояс по имени региона. В нем задается регион EST , что соответствует Восточному времени в Соединенных Штатах. Обозначение TZR в маске форматирования указывает местоположение имени региона во входной строке:

Этот пример интересен тем, что он представляет не Восточное стандартное время, а просто Восточное время. Разница между ними заключается в том, что термин Восточное время может обозначать как Восточное стандартное время, так и Восточное летнее время — в зависимости от того, действует ли переход на летнее время. Я специально сформулировал этот пример так, чтобы он был неоднозначным. 2 ноября 2014 года — это дата завершения действия Восточного летнего времени, когда время 2:00 превращается в 1:00. Поэтому в указанный день 1:30 наступает дважды: по Восточному летнему и по Восточному стандартному времени. Так какое же время имеется в виду при определении 1:30 2 ноября 2014 года?

Названия региона недостаточно для различения стандартного и летнего времени. Для устранения этой неоднозначности необходимо задать сокращение часового пояса, как это сделано в двух следующих примерах. Восточное летнее время обозначается сокращением EDT (Eastern Daylight Time):

Если параметр сеанса ERROR_ON_OVERLAP_TIME равен TRUE (по умолчанию используется значение FALSE ), база данных будет выдавать ошибку при задании неоднозначного времени.

Восточное стандартное время обозначается сокращением EST (Eastern Standard Time):

Для предотвращения неоднозначности рекомендуется либо задавать смещение часового пояса в часах и минутах (например, –5:00), либо использовать сочетание названия и сокращения часового пояса. Если указано только имя региона, то при наличии неоднозначности в определении времени (летнее или стандартное) Oracle будет считать, что задано стандартное время.

Полный список поддерживаемых Oracle названий регионов и часовых поясов содержит представление V$TIMEZONE_NAMES , доступное для всех пользователей базы данных. Анализируя информацию этого представления, обратите внимание на то, что сокращения часовых поясов не уникальны (см. следующую врезку).

О СТАНДАРТЕ ЧАСОВЫХ ПОЯСОВ

Часовые пояса настолько важны, что, казалось бы, должен существовать некий международный стандарт, определяющий их названия и сокращения. Тем не менее такого стандарта нет. Названия часовых поясов и сокращения не только не стандартизированы, но среди них даже встречаются повторения. Например, сокращение EST обозначает Восточное стандартное время и в США, и в Австралии, то есть соответствует двум часовым поясам с разным смещением времени. Сокращение BST применяется для нескольких часовых поясов, включая Тихоокеанский/Мидуэй и Лондонский, отличающиеся на 12 часов в режиме летнего времени или на 11 часов в остальное время года. Вот почему функция TO_TIMESTAMP не позволяет задавать часовой пояс лишь по сокращению названия.

Поскольку единого стандарта часовых поясов не существует, резонно спросить — откуда взяты имена регионов в представлении V$TIMEZONE_NAMES? Источником информации Oracle являются документы из каталога ftp://elsie.nci.nih.gov/pub/ . Ищите файлы с именами вида tzdataxxx.tar.gz , где XXX — версия данных. Обычно в архиве хранится страница с именем tz-link.htm , содержащая дополнительную информацию и ссылки на URL-адреса других документов, относящихся к часовым поясам.

Точное совпадение маски форматирования

При преобразовании символьной строки в дату/время функции преобразования TO_ *обычно руководствуются несколькими предположениями:

  • Лишние пробелы в символьной строке игнорируются.
  • Числовые значения (например, день года) не обязаны включать начальные нули для заполнения маски.
  • Знаки препинания в преобразуемой строке могут просто совпадать со знаками препинания в маске по длине и позиции.


Такая гибкость очень удобна — до того момента, когда вы захотите ограничить пользователя или даже пакетный процесс от ввода данных в нестандартном формате. В некоторых ситуациях разделение дня и месяца символом «^» вместо дефиса («-») попросту недопустимо. В таких ситуациях можно включить в маску форматирования модификатор FX , чтобы потребовать точного совпадения между строкой и маской форматирования.

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

PL/SQL выдает одну из следующих ошибок:

Однако следующий пример выполняется успешно, потому что регистр символов не учитывается, и модификатор FX этого факта не меняет:

Модификатор FX может задаваться в верхнем регистре, нижнем регистре или со смешением регистров; его действие от этого не изменяется.

Модификатор FX работает как переключатель и может многократно встречаться в маске форматирования. Пример:

Каждый раз, когда модификатор FX встречается в маске форматирования, происходит переключение. В приведенном примере точное совпадение обязательно для дня и года, но не для месяца.

Ослабление требований к точности совпадения

Модификатор FM (Fill Mode, «режим заполнения») в маске форматирования при вызове TO_DATE или TO_TIMESTAMP используется для заполнения строки пробелами или нулями, чтобы обеспечить успешное прохождение проверки FX . Пример:

Преобразование проходит успешно, потому что модификатор FM дополняет год 94 нулями, и тот превращается в 0094 (хотя трудно представить, чтобы вам когда-нибудь понадобилось делать что-то подобное). День 1 дополняется одним нулем и превращается в 01. Модификатор FM работает в режиме переключателя, как и FX .

Казалось бы, такое использование FM противоречит самой цели FX . Зачем использовать оба модификатора? Например, модификатор FX может применяться для принудительного использования конкретных ограничителей, тогда как FM ослабляет требование о вводе начальных нулей.

Интерпретация года из двух цифр

Переход в новое тысячелетие породил интерес к хранению года в формате из четырех цифр, потому что разработчики внезапно осознали неоднозначность часто встречающегося формата с двумя цифрами. Например, к какому году относится дата 1-Jan- 45 — к 1945 или 2045? В таких ситуациях лучше всего использовать однозначный год с четырьмя цифрами. Но несмотря на это понимание, старые привычки изменяются с трудом, а внесение изменений в существующие системы сопряжено с большими трудностями. Возможно, ваши пользователи предпочитают вводить год из двух цифр, а не из четырех. Для подобных случаев Oracle предоставляет форматный элемент RR, интерпретирующий год из двух цифр в скользящем окне.

В последующем обсуждении термин «век» используется в его житейском понимании. К 20-му веку относятся годы 1900–1999, а к 21-му — годы 2000–2099. Я понимаю, что такое определение не совсем корректно, но оно упрощает объяснение поведения RR .

Если текущий год относится к первой половине века (годы с 0 по 49), то:

  • при вводе даты, относящейся к первой половине века (то есть от 0 до 49) RR возвращает текущий век;
  • при вводе даты, относящейся ко второй половине века (то есть от 50 до 99), RR возвращает предыдущий век.

Если же текущий год относится ко второй половине века (годы с 50 по 99), то:

  • при вводе даты, относящейся к первой половине века, RR возвращает следующий век;
  • при вводе даты, относящейся ко второй половине века, RR возвращает текущий век.

Запутались? Я тоже разобрался не сразу. Правила RR пытаются предположить, какой век подразумевал пользователь, если он не был указан явно.

Рассмотрим несколько примеров воздействия RR . Обратите внимание: для годов 88 и 18 SYSDATE возвращает текущую дату из 20 и 21 века соответственно:

Логику RR в текущих приложениях можно активизировать несколькими способами. Самый простой и элегантный способ — изменение маски форматирования дат по умолчанию в экземпляре базы данных. Собственно, Oracle уже делает это за нас. В стандартной установке Oracle параметр NLS_DATE_FORMAT задается следующим образом:

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

Преобразование часовых поясов в символьные строки

Часовые пояса усложняют преобразование значений даты/времени в символьные строки. Информация часового пояса состоит из следующих элементов.

  • Смещение относительно UTC в часах и минутах.
  • Имя региона часового пояса.
  • Сокращение часового пояса.

Все эти элементы хранятся отдельно в переменной TIMESTAMP WITH TIME ZONE. Смещение относительно UTC присутствует всегда, но возможность вывода названия региона или сокращения зависит от того, задана эта информация или нет. Рассмотрим следующий пример:

В этом коде следует обратить внимание на некоторые аспекты, относящиеся к информации часовых поясов:

  • В значении, присвоенном переменной ts1 , часовой пояс задается смещением относительно UTC. Соответственно при выводе ts1 выводится только смещение.
  • При отсутствии имени региона для ts1 Oracle предоставляет смещение часового пояса. Это все же лучше, чем полное отсутствие информации.
  • В значении, присвоенном переменной ts2 , указывается регион часового пояса.

Внутреннее преобразование переводит его в смещение относительно UTC, но имя региона при этом сохраняется. Таким образом, для ts2 может быть выведено как смещение UTC, так и имя региона.

  • Для переменной ts2 Oracle правильно распознает действие летнего времени в июне. В результате значение ts2 неявно связывается с сокращением EDT .
  • В значении, присвоенном переменной ts3 , задается как регион, так и сокращение часового пояса; соответственно, оба значения могут быть выведены.

Смещения относительно UTC и регионы часовых поясов связаны отношениями «один ко многим»; смещения недостаточно для однозначного определения имени региона. Вот почему невозможно вывести имя региона, если оно не было задано изначально.

Дополнение вывода с модификатором FM

Модификатор FM , описанный в разделе «Ослабление требований к точности совпадения», также может использоваться для преобразования даты/времени в символьную строку для подавления дополняющих пробелов и начальных нулей, которые могут быть возвращены функцией TO_CHAR .

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

Однако с модификатором FM в начале маски и лишний пробел, и начальные нули исчезают:

Модификатор может задаваться в верхнем регистре, нижнем регистре или со смешением регистров; его действие от этого не изменяется.


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

Вывод даты в PHP в разных форматах.

При разработке проектов на php часто возникает необходимость вывести дату в том или ином формате, в данной статье рассмотрим несколько способов работы с датами в php. Начнем мы с функции date(); Поддержка данной функции имеется в PHP версиях(4,5,7). Функция date() — форматирует вывод системной даты(времени).

string date ( string $format [, int $timestamp = time() ] )

Возвращает строку, отформатированную в соответствии с указанным шаблоном format . Аргументом timestamp задается метка времени или текущее системное время если timestamp не задан.

В параметр format можно передавать следующие символы.

Символ в строке format Описание Пример возвращаемого значения
День
d День месяца, 2 цифры с ведущим нулём от 01 до 31
D Текстовое представление дня недели, 3 символа от Mon до Sun
j День месяца без ведущего нуля от 1 до 31
l (строчная ‘L’) Полное наименование дня недели от Sunday до Saturday
N Порядковый номер дня недели в соответствии со стандартом ISO-8601 (добавлен в версии PHP 5.1.0) от 1 (понедельник) до 7 (воскресенье)
S Английский суффикс порядкового числительного дня месяца, 2 символа st, nd, rd или th. Применяется совместно с j
w Порядковый номер дня недели от 0 (воскресенье) до 6 (суббота)
z Порядковый номер дня в году (начиная с 0) От 0 до 365
Неделя
W Порядковый номер недели года в соответствии со стандартом ISO-8601; недели начинаются с понедельника Например: 42 (42-я неделя года)
Месяц
F Полное наименование месяца, например January или March от January до December
m Порядковый номер месяца с ведущим нулём от 01 до 12
M Сокращенное наименование месяца, 3 символа от Jan до Dec
n Порядковый номер месяца без ведущего нуля от 1 до 12
t Количество дней в указанном месяце о т 28 до 31
Год
Y Порядковый номер года, 4 цифры Примеры: 1999, 2003
y Номер года, 2 цифры Примеры: 99, 03
Время
a AM (англ. «до полудня») или PM (англ. «после полудня») в нижнем регистре am или pm
A Ante meridiem или Post meridiem в верхнем регистре AM или PM
B Время в формате Интернет-времени (альтернативной системы отсчета времени суток) от 000 до 999
g Часы в 12-часовом формате без ведущего нуля от 1 до 12
G Часы в 24-часовом формате без ведущего нуля от 0 до 23
h Часы в 12-часовом формате с ведущим нулём от 01 до 12
H Часы в 24-часовом формате с ведущим нулём от 00 до 23
i Минуты с ведущим нулём от 00 до 59
s Секунды с ведущим нулём от 00 до 59
c Дата в формате стандарта ISO 8601 (добавлено в PHP 5) 2004-02-12T15:19:21+00:00
r Дата в формате » RFC 2822 Например: Thu, 21 Dec 2000 16:01:07 +0200

Рассмотрим несколько примеров использования данной функции.

Например код приведенный ниже выведет дату в формате день-месяц-год — 02-02-2020

Вывод даты на русском.

В следующем примере месяц будет выведен словом.

Результат будет следующим — 2020-02-Feb. Месяц выводится, однако нам нужно чтобы он выводился на русском языке. Как же быть?

К сожалению функция date() не подвержена локализации и для решения нашей задачи нам потребуется другая функция.

Для начала установив русскую локализацию

И для вывода даты с настройками локали используем функцию strftime(); Теперь название дней и месяцев будет выводится с учетом установленной локали, в нашем случае на русском языке.

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

Форматирование поля даты и времени

Тип данных «Дата/время» содержит разнообразные форматы, которые помогают достичь уникальных обстоятельств. Формат даты и времени имеет три варианта: сохранить форматы по умолчанию, применить готовый формат или создать пользовательский формат. Если применить формат к полю таблицы, то тот же формат будет автоматически применен к любому элементу управления формы или отчета, который впоследствии привязывается к этому полю таблицы. Форматирование позволяет изменить способ отображения данных и не влияет на их хранение и способ ввода данных пользователями.

В этой статье

Общие сведения о форматах даты и времени

В Access автоматически отображаются дата и время в общем формате даты и длинном времени. Даты отображаются в формате мм/дд/гггг в США и AS, дд/мм/гггг за пределами США, где mm — это месяц, dd — это день, а гггг — год. Время отображается в формате чч: мм: сс AM/PM, где чч — час, мм — минута, а сс — секунды.

Эти автоматически форматы даты и времени зависят от географического расположения, указанного в параметрах языка и региональных параметров Microsoft Windows на компьютере. Например, в Европе и многие части Азии в зависимости от вашего местоположения вы можете увидеть дату и время в формате 28.11.2020 12:07:12 PM или 28/11/2020 12:07:12 PM. В Соединенных Штатах вы видите 11/28/2020 12:07:12 PM.

Эти предопределенные форматы можно изменить с помощью настраиваемых форматов отображения. Например, можно ввести дату в европейском формате, например в 28.11.2020, чтобы в таблице, форме или отчете отображалось значение 11/28/2020. Выбранный вами настраиваемый формат не влияет на способ ввода данных или способ хранения данных в Access.

Access автоматически обеспечивает определенный уровень проверки данных, связанный с форматированием даты и времени. Например, если ввести недопустимую дату, например 32.11.2020, появится сообщение, и вы сможете ввести новое значение или преобразовать поле из типа данных Дата и время в текстовый тип данных. Допустимые значения даты находятся в диапазоне от-657 434 (1 января 100 г. Н.Э.) до 2 958 465 (31 декабря, 9999 г. Н.Э.). Допустимый диапазон значений времени: от .0 до. 9999 или 23:59:59.

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

Применение встроенного формата

В Access есть несколько предопределенных форматов для данных даты и времени.

Откройте таблицу в режиме Конструктор.

В верхней части бланка запроса выберите поле даты и времени, которое вы хотите отформатировать.

В разделе Свойства поля щелкните стрелку в поле свойства Формат и выберите формат из раскрывающегося списка.

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

Чтобы применить изменения ко всей базе данных, в диалоговом окне » Обновление свойств » отобразите формы и другие объекты, которые будут наследовать новый формат. Нажмите Да.

Дополнительные сведения можно найти в разделе распространение свойства поля.

Сохраните изменения и переключитесь в режим таблицы, чтобы узнать, соответствует ли формат вашим требованиям.

Примечание. Новые формы, отчеты и представления, созданные на основе этой таблицы, изменяют форматирование таблицы, но ее можно переопределить в форме, отчете или представлении, не меняя форматирование таблицы.

В форме или отчете

Откройте форму или режим макета отчета или конструктор.

Поместите указатель мыши в текстовом поле и выберите дату и время.

Нажмите клавишу F4, чтобы открыть окно свойств.

Задайте для свойства Format один из предопределенных форматов даты.

Откройте запрос в режиме конструктора.


Щелкните поле даты правой кнопкой мыши и выберите пункт Свойства.

На странице свойств в списке свойств Формат выберите нужный формат.

Функция FormatDateTime используется для форматирования значения даты в одном из нескольких предварительно определенных форматов.

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

Примеры встроенных форматов

Полный формат даты

По умолчанию Значения дат отображаются как числа и значения времени, в том числе часы, минуты и секунды, а затем AM или PM. Для обоих типов значений в Access используются разделители даты и времени, заданные в региональных параметрах Windows. Если в значении нет компонента времени, Access выводит только дату. Если значение не имеет компонента даты, Access отображает только время.

06/30/2020 10:10:42 AM

Длинный формат даты

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

Понедельник, 27 августа 2020 г.

Средний формат даты

Отображает дату в формате ДД/МММ/YY, но использует разделитель дат, указанный в региональных параметрах Windows.

Краткий формат даты

Выводит значения даты в соответствии с кратким форматом даты, указанным в региональных параметрах Windows.

Длинный формат времени

Отображает часы, минуты и секунды, а затем AM или PM. Access использует разделитель, указанный в параметре время в региональных параметрах Windows.

Средний формат времени

Выводится количество часов и минут, за которыми следует AM или PM. Access использует разделитель, указанный в параметре время в региональных параметрах Windows.

Краткий формат времени

Отображаются только часы и минуты. Access использует разделитель, указанный в параметре время в региональных параметрах Windows.

Применение настраиваемого формата

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

Когда вы применяете пользовательский формат к полю «Дата/время», вы можете объединить различные форматы, выполнив два раздела: один для даты, а другой — для времени. В таком случае вы разделите разделы пробелами. Например, вы можете сочетать общие форматы даты и длинного времени следующим образом: дд. dd. гггг ч: СС.

Откройте таблицу в режиме Конструктор.

В верхней части бланка запроса выберите поле даты и времени, которое вы хотите отформатировать.

В разделе Свойства поля на вкладке Общие щелкните ячейку рядом с полем Формат и введите определенные символы в зависимости от потребностей форматирования.

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

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

Дополнительные сведения можно найти в разделе распространение свойства поля.

Сохраните изменения, а затем переключитесь в режим таблицы, чтобы узнать, соответствует ли формат вашим требованиям.

Примеры настраиваемых форматов

Ниже приведены некоторые примеры различных способов форматирования за 13 января 2012 г.

Чтобы отформатировать такую дату.

Введите этот код в поле свойства Формат :

Работа с датой и временем в Python

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

Модуль datetime

Мы изучим следующие классы модуля:

  • datetime.date
  • datetime.timedelta
  • datetime.datetime


Благодаря этим классам мы в будущем сможем работать с большей частью случаев, в которых нам понадобятся объекты date и datetime. Также существует класс tzinfo, который применяется для работы с часовыми поясами. Для дополнительной информации об этом классе вы можете обратиться к документации Python.

datetime.date

Python может представлять даты различными способами. Для начала, рассмотрим формат datetime.date, так как это один из самых простых объектов date.

В данном коде показано, как создать простой объект даты. Класс date принимает три аргумента: год, месяц и день. Если вы укажите неправильное значение, вы увидите ошибку ValueError, как в случае выше. В противном случае вы увидите, что объект datetime.date вернулся. Давайте взглянем на еще один пример:

Здесь мы присваиваем объекту date переменную d. Теперь мы можем получить доступ к различным компонентам даты по названиям, таким как d.year или d.month. Давайте посмотрим, какой сейчас день:

Это может быть полезно, когда вам нужно записать, какой сейчас день. Или, если вам нужно выполнить основанный на сегодняшней дате расчет. Мелочь, а приятно.

datetime.datetime

Объект datetime.datetime содержит всю информацию объектов datetime.date плюс datetime.time. Давайте приведем несколько примеров, для лучшего понимания разницы между этим объектом, и объектом datetime.date.

Мы видим, что datetime.datetime принимает несколько дополнительных аргументов: год, месяц, день, час, минута и секунда. Это также позволяет вам указывать информацию о микросекундах и часовом поясе. При работе с базами данных, данные типы объектов будут использоваться достаточно часто. Большую часть вашей работы, вам нужно будет конвертировать форматы date или datetime Python в форматы SQL datetime или timestamp. Обратите внимание на то, что today совместно с datetime.datetime использует два разных метода:

Модуль datetime содержит другой метод, под названием strftime. Этот метод позволяет разработчику создавать строку, отображающую время в более понятной для человека форме. Существует целая таблица параметров форматирования, с которой рекомендуется ознакомиться в документации Python, в секции 8.1.7. Давайте взглянем на несколько примеров, показывающих всю полезность данного метода:

Первый пример – это скорее хитрость. В нем показано, как конвертировать сегодняшний объект datetime в строку, следующую за форматом YYYYMMDD (ГГГГММДД). Второй пример более наглядный.

В нем мы присваиваем объект datetime переменной под названием today и применяем два разных параметра форматирования строки. Первый параметр добавляет косые черточки между элементами datetime, а также перегруппировывает datetime, теперь он делится на месяц, день и год. В последнем примере мы создаем временную отметку, которая следует типичному формату: YYYY-MM-DD.HH.MM.SS. Если вам нужно указать год как двухзначный (“YY”), вы можете заменить %Y на %y.

datetime.timedelta

Объект datetime.timedelta отображает длительность времени. Другими словами, это разница между двумя датами или временными отметками. Давайте взглянем на наглядный пример:

Мы создали два объекта datetime. Один указывает на сегодняшний день, второй – на прошедшую неделю. После этого, мы берем разницу между ними. Это возвращает объект timedelta, который мы можем далее использовать, чтобы выяснить, сколько прошло дней или секунд, между этими двумя датами. Если вам нужно узнать количество часов или минут между двумя датами, вам понадобится немножко математики, чтобы выяснить это. Давайте взглянем на проверенный способ:

Отсюда мы узнаем, что в неделе 186 часов и 13 минут. Обратите внимание на то, что мы используем двойную косую черту в качестве нашего оператора деления, также известного как floor division. Теперь мы готовы к тому, чтобы узнать больше о модуле time Python.

Модуль time

Модуль time открывает разработчику Python доступ к нескольким связанным со временем функциям. Модуль основан на «эпохе», точке, с которой начинается время. Для систем Unix, эпоха началась в 1970 году. Чтобы узнать, какая эпоха в вашей системе, попробуйте запустить следующий код:

Я запустил его на Windows 7, которая также уверена в том, что начало времен датируется 1970м годом. В любом случае, в данном разделе мы ознакомимся со следующими функциями:

Date — Форматирует системную дату/время

(PHP 4, PHP 5, PHP 7)

date — Форматирует вывод системной даты/времени

Описание

Возвращает строку, отформатированную в соответствии с указанным шаблоном format . Используется метка времени, заданная аргументом timestamp , или текущее системное время, если timestamp не задан. Таким образом, timestamp является необязательным и по умолчанию равен значению, возвращаемому функцией time() .

Список параметров

Шаблон результирующей строки ( string ) с датой. См. параметры форматирования ниже. Также существует несколько предопределенных констант даты/времени, которые могут быть использованы вместо этих параметров. Например: DATE_RSS заменяет шаблон ‘D, d M Y H:i:s’.

В параметре format распознаются следующие символы

Символ в строке format Описание Пример возвращаемого значения
День
d День месяца, 2 цифры с ведущим нулём от 01 до 31
D Текстовое представление дня недели, 3 символа от Mon до Sun
j День месяца без ведущего нуля от 1 до 31
l (строчная ‘L’) Полное наименование дня недели от Sunday до Saturday
N Порядковый номер дня недели в соответствии со стандартом ISO-8601 (добавлен в версии PHP 5.1.0) от 1 (понедельник) до 7 (воскресенье)
S Английский суффикс порядкового числительного дня месяца, 2 символа st, nd, rd или th. Применяется совместно с j
w Порядковый номер дня недели от 0 (воскресенье) до 6 (суббота)
z Порядковый номер дня в году (начиная с 0) От 0 до 365
Неделя
W Порядковый номер недели года в соответствии со стандартом ISO-8601; недели начинаются с понедельника (добавлено в версии PHP 4.1.0) Например: 42 (42-я неделя года)
Месяц
F Полное наименование месяца, например January или March от January до December
m Порядковый номер месяца с ведущим нулём от 01 до 12
M Сокращенное наименование месяца, 3 символа от Jan до Dec
n Порядковый номер месяца без ведущего нуля от 1 до 12
t Количество дней в указанном месяце от 28 до 31
Год
L Признак високосного года 1, если год високосный, иначе 0.
o Номер года в соответствии со стандартом ISO-8601. Имеет то же значение, что и Y, кроме случая, когда номер недели ISO (W) принадлежит предыдущему или следующему году; тогда будет использован год этой недели. (добавлен в версии PHP 5.1.0) Примеры: 1999 или 2003
Y Порядковый номер года, 4 цифры Примеры: 1999, 2003
y Номер года, 2 цифры Примеры: 99, 03
Время
a Ante meridiem (англ. «до полудня») или Post meridiem (англ. «после полудня») в нижнем регистре am или pm
A Ante meridiem или Post meridiem в верхнем регистре AM или PM
B Время в формате Интернет-времени (альтернативной системы отсчета времени суток) от 000 до 999
g Часы в 12-часовом формате без ведущего нуля от 1 до 12
G Часы в 24-часовом формате без ведущего нуля от 0 до 23
h Часы в 12-часовом формате с ведущим нулём от 01 до 12
H Часы в 24-часовом формате с ведущим нулём от 00 до 23
i Минуты с ведущим нулём от 00 до 59
s Секунды с ведущим нулём от 00 до 59
u Микросекунды (добавлено в версии PHP 5.2.2). Учтите, что date() всегда будет возвращать 000000, т.к. она принимает целочисленный ( integer ) параметр, тогда как DateTime::format() поддерживает микросекунды. Например: 654321
Временная зона
e Код шкалы временной зоны(добавлен в версии PHP 5.1.0) Примеры: UTC, GMT, Atlantic/Azores
I (заглавная i) Признак летнего времени 1, если дата соответствует летнему времени, 0 в противном случае.
O Разница с временем по Гринвичу, в часах Например: +0200
P Разница с временем по Гринвичу с двоеточием между часами и минутами (добавлено в версии PHP 5.1.3) Например: +02:00
T Аббревиатура временной зоны Примеры: EST, MDT .
Z Смещение временной зоны в секундах. Для временных зон, расположенных западнее UTC возвращаются отрицательные числа, а расположенных восточнее UTC — положительные. от -43200 до 50400
Полная дата/время
c Дата в формате стандарта ISO 8601 (добавлено в PHP 5) 2004-02-12T15:19:21+00:00
r Дата в формате » RFC 2822 Например: Thu, 21 Dec 2000 16:01:07 +0200
U Количество секунд, прошедших с начала Эпохи Unix (The Unix Epoch, 1 января 1970 00:00:00 GMT) Смотрите также time()

Любые другие символы, встреченные в строке-шаблоне, будут выведены в результирующую строку без изменений. Z всегда возвращает 0 при использовании gmdate() .

Поскольку рассматриваемая функция принимает в качестве параметра временные метки типа integer , форматирующий символ u будет полезен только при использовании функции date_format() и пользовательских меток времени, созданных с помощью функции date_create() .

Необязательный параметр timestamp представляет собой integer метку времени, по умолчанию равную текущему локальному времени, если timestamp не указан. Другими словами, значение по умолчанию равно результату функции time() .

Возвращаемые значения

Возвращает отформатированную строку с датой. При передаче нечислового значения в качестве параметра timestamp будет возвращено FALSE и вызвана ошибка уровня E_WARNING .

Ошибки

Каждый вызов к функциям даты/времени при неправильных настройках временной зоны сгенерирует ошибку уровня E_NOTICE , и/или ошибку уровня E_STRICT или E_WARNING при использовании системных настроек или переменной окружения TZ. Смотрите также date_default_timezone_set()

Список изменений

Версия Описание

Теперь ошибки, связанные с временными зонами, генерируют ошибки уровня E_STRICT и E_NOTICE .

5.1.0 Допустимым диапазоном дат для временных меток обычно являются даты с 13 декабря 1901, 20:45:54 GMT по 19 января 2038, 03:14:07 GMT. (Они соответствуют минимальному и максимальному значению 32-битного целого числа со знаком). Однако для PHP версии ниже 5.1.0 в некоторых операционных системах (например, Windows) этот диапазон был ограничен датами 01-01-1970 до 19-01-2038.
5.1.0
5.1.1 Для стандартных форматов даты/времени существуют специальные константы, которые могут быть указаны в качестве параметра format .

Примеры

Пример #1 Примеры использования функции date()

// установка временной зоны по умолчанию. Доступно начиная с версии PHP 5.1
date_default_timezone_set ( ‘UTC’ );


// выведет примерно следующее: Monday
echo date ( «l» );

// выведет примерно следующее: Monday 8th of August 2005 03:12:46 PM
echo date ( ‘l jS of F Y h:i:s A’ );

// выведет: July 1, 2000 is on a Saturday
echo «July 1, 2000 is on a » . date ( «l» , mktime ( 0 , 0 , 0 , 7 , 1 , 2000 ));

/* пример использования константы в качестве форматирующего параметра */
// выведет примерно следующее: Wed, 25 Sep 2013 15:28:57 -0700
echo date ( DATE_RFC2822 );

// выведет примерно следующее: 2000-07-01T00:00:00+00:00
echo date ( DATE_ATOM , mktime ( 0 , 0 , 0 , 7 , 1 , 2000 ));
?>

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

Пример #2 Экранирование символов в функции date()

Для вывода прошедших и будущих дат удобно использовать функции date() и mktime() .

Пример #3 Пример совместного использования функций date() и mktime()

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

Ещё несколько примеров использования функции date() . Важно отметить, что следует экранировать все символы, которые необходимо оставить без изменений. Это справедливо и для тех символов, которые в текущей версии PHP не распознаются как форматирующие, поскольку это может быть введено в следующих версиях. Для экранировании управляющих последовательностей (например, n) следует использовать одинарные кавычки.

Пример #4 Форматирование с использованием date()

// Предположим, что текущей датой является 10 марта 2001, 5:16:18 вечера,
// и мы находимся во временной зоне Mountain Standard Time (MST)

$today = date ( «F j, Y, g:i a» ); // March 10, 2001, 5:16 pm
$today = date ( «m.d.y» ); // 03.10.01
$today = date ( «j, n, Y» ); // 10, 3, 2001
$today = date ( «Ymd» ); // 20010310
$today = date ( ‘h-i-s, j-m-y, it is w Day’ ); // 05-16-18, 10-03-01, 1631 1618 6 Satpm01
$today = date ( ‘it is the jS day.’ ); // it is the 10th day.
$today = date ( «D M j G:i:s T Y» ); // Sat Mar 10 17:16:18 MST 2001
$today = date ( ‘H:m:s m is month’ ); // 17:03:18 m is month
$today = date ( «H:i:s» ); // 17:16:18
$today = date ( «Y-m-d H:i:s» ); // 2001-03-10 17:16:18 (формат MySQL DATETIME)
?>

Для форматирования дат на других языках используйте вместо date() функции setlocale() и strftime() .

Примечания

Для получения метки времени из строкового представления даты можно воспользоваться функцией strtotime() . Кроме того, некоторые базы данных имеют собственные функции для преобразования внутреннего представления даты в метку времени (например, функция MySQL » UNIX_TIMESTAMP).

Начиная с версии PHP 5.1, временную метку начала запроса можно получить из поля $_SERVER[‘REQUEST_TIME’].

Смотрите также

  • gmdate() — Форматирует дату/время по Гринвичу
  • idate() — Преобразует локальное время/дату в целое число
  • getdate() — Возвращает информацию о дате/времени
  • getlastmod() — Определение времени последней модификации страницы
  • mktime() — Возвращает метку времени Unix для заданной даты
  • strftime() — Форматирует текущую дату/время с учетом текущих настроек локали
  • time() — Возвращает текущую метку времени Unix
  • strtotime() — Преобразует текстовое представление даты на английском языке в метку времени Unix
  • Предопределенные константы даты и времени

Вывод даты в PHP в разных форматах.

При разработке проектов на php часто возникает необходимость вывести дату в том или ином формате, в данной статье рассмотрим несколько способов работы с датами в php. Начнем мы с функции date(); Поддержка данной функции имеется в PHP версиях(4,5,7). Функция date() — форматирует вывод системной даты(времени).

string date ( string $format [, int $timestamp = time() ] )

Возвращает строку, отформатированную в соответствии с указанным шаблоном format . Аргументом timestamp задается метка времени или текущее системное время если timestamp не задан.

В параметр format можно передавать следующие символы.

Символ в строке format Описание Пример возвращаемого значения
День
d День месяца, 2 цифры с ведущим нулём от 01 до 31
D Текстовое представление дня недели, 3 символа от Mon до Sun
j День месяца без ведущего нуля от 1 до 31
l (строчная ‘L’) Полное наименование дня недели от Sunday до Saturday
N Порядковый номер дня недели в соответствии со стандартом ISO-8601 (добавлен в версии PHP 5.1.0) от 1 (понедельник) до 7 (воскресенье)
S Английский суффикс порядкового числительного дня месяца, 2 символа st, nd, rd или th. Применяется совместно с j
w Порядковый номер дня недели от 0 (воскресенье) до 6 (суббота)
z Порядковый номер дня в году (начиная с 0) От 0 до 365
Неделя
W Порядковый номер недели года в соответствии со стандартом ISO-8601; недели начинаются с понедельника Например: 42 (42-я неделя года)
Месяц
F Полное наименование месяца, например January или March от January до December
m Порядковый номер месяца с ведущим нулём от 01 до 12
M Сокращенное наименование месяца, 3 символа от Jan до Dec
n Порядковый номер месяца без ведущего нуля от 1 до 12
t Количество дней в указанном месяце о т 28 до 31
Год
Y Порядковый номер года, 4 цифры Примеры: 1999, 2003
y Номер года, 2 цифры Примеры: 99, 03
Время
a AM (англ. «до полудня») или PM (англ. «после полудня») в нижнем регистре am или pm
A Ante meridiem или Post meridiem в верхнем регистре AM или PM
B Время в формате Интернет-времени (альтернативной системы отсчета времени суток) от 000 до 999
g Часы в 12-часовом формате без ведущего нуля от 1 до 12
G Часы в 24-часовом формате без ведущего нуля от 0 до 23
h Часы в 12-часовом формате с ведущим нулём от 01 до 12
H Часы в 24-часовом формате с ведущим нулём от 00 до 23
i Минуты с ведущим нулём от 00 до 59
s Секунды с ведущим нулём от 00 до 59
c Дата в формате стандарта ISO 8601 (добавлено в PHP 5) 2004-02-12T15:19:21+00:00
r Дата в формате » RFC 2822 Например: Thu, 21 Dec 2000 16:01:07 +0200

Рассмотрим несколько примеров использования данной функции.

Например код приведенный ниже выведет дату в формате день-месяц-год — 02-02-2020

Вывод даты на русском.

В следующем примере месяц будет выведен словом.

Результат будет следующим — 2020-02-Feb. Месяц выводится, однако нам нужно чтобы он выводился на русском языке. Как же быть?

К сожалению функция date() не подвержена локализации и для решения нашей задачи нам потребуется другая функция.

Для начала установив русскую локализацию

И для вывода даты с настройками локали используем функцию strftime(); Теперь название дней и месяцев будет выводится с учетом установленной локали, в нашем случае на русском языке.

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

Функции работы с датой и временем

Для работы с системной датой и временем используется библиотека time.h .

Типы, определенные в библиотеке time.h

Тип Описание
size_t Целочисленный тип, возвращаемый операцией sizeof .
clock_t Арифметический тип, подходящий для представления времени.
time_t Арифметический тип, подходящий для представления времени.
struct tm Структурный тип, содержащий компоненты календарного времени.

Для определения текущего календарного времени используется функция

Данная функция возвращает время в секундах начиная с 1 января 1970 г.

Структура tm имеет вид

преобразует календарное время, указанное ptm , сохраняет его в структуре tm и возвращает указатель на нее.

осуществляет обратное преобразование.

Если время не доступно или не может быть представлено, возвращает (clock_t) (-1) .

копирует строку 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 Наименование часового пояса (если доступно)
%% % (то есть знак процента).

Функция, позволяющая вывести день недели на русском языке

Добавление нескольких дней к текущему времени

Рассмотрим еще один пример. Допустим, требуется добавить несколько дней к текущей дате.
Реализация на Си

Илон Маск рекомендует:  DiskFree - Функция Delphi
Понравилась статья? Поделиться с друзьями:
Кодинг, CSS и SQL