Для работы с системной датой и временем используется библиотека time.h.
Типы, определенные в библиотеке time.h
Тип | Описание |
size_t | Целочисленный тип, возвращаемый операцией sizeof. |
clock_t | Арифметический тип, подходящий для представления времени. |
time_t | Арифметический тип, подходящий для представления времени. |
struct tm | Структурный тип, содержащий компоненты календарного времени. |
Для определения текущего календарного времени используется функция Данная функция возвращает время в секундах начиная с 1 января 1970 г. Например,
1234567891011121314151617181920212223242526272829
30
#define _CRT_SECURE_NO_WARNINGS#include #include #include #include #include char * settime(struct tm *u){
char s[40];
char *tmp; for (int i = 0; i0- вкл.)}; Функция
struct tm *localtime(const time_t *ptm);
преобразует календарное время, указанное ptm, сохраняет его в структуре tm и возвращает указатель на нее. Функция
time_t mktime(struct tm *timeptr);
осуществляет обратное преобразование. Функция
возвращает наилучшее приближение процессорного времени, прошедшего с момента запуска программы; для получения времени в секундах значение необходимо разделить на константу, определенную в библиотеке time.h:
#define CLOCKS_PER_SEC 1000
Если время не доступно или не может быть представлено, возвращает (clock_t) (-1).
Функция
size_t strftime(char *restrict s, // указатель на выходную строкуsize_t max, // максимальный размер выходной строкиconst char *restrict fmt, // указатель на строку форматаconst struct tm *restrict tmpt); // указатель на структуру tm
копирует строку fmt в строку s, заменяя спецификаторы формата в fmt соответствующими данными, взятыми из содержимого структуры времени, на которое указывает tmpt; в строку s помещается не более max символов.
Функция возвращает количество символов (исключая нулевой) в результирующей строке. Если результирующая строка (включая нулевой символ) содержит больше, чем max символов, функция возвращает 0, а содержимое s не определено.
Спец. | Назначение |
%a | Локальное сокращенное название дня недели |
%A | Локальное полное название дня недели |
%b | Локальное сокращенное название месяца |
%B | Локальное полное название месяца |
%c | Локальный разделитель даты и времени |
%d | День месяца в виде десятичного числа (01-31) |
%D | Эквивалент %m%d%y |
%e | День месяца (десятичное число): однозначные числа дополнены пробелом |
%F | Эквивалент %Y-%m-%d |
%g | Последние два разряда года (00-99) |
%G | Год в виде десятичного числа |
%H | Часы (по 24-часовой шкале) в виде десятичного числа (00-23) |
%I | Часы (по 12-часовой шкале) в виде десятичного числа (01-12) |
%j | День года в виде десятичного числа (001-366) |
%m | Месяц в виде десятичного числа (01-12) |
%n | Символ новой строки |
%M | Минуты в виде десятичного числа (00-59) |
%p | Локальный эквивалент a.m./p.m. для 12-часовой временной шкалы |
%r | Локальное 12-часовое время |
%R | Эквивалент %H:%M |
%S | Секунды в виде десятичного числа (00-61) |
%t | Символ горизонтальной табуляции |
%T | Эквивалент %H:%M:%S |
%u | Номер дня недели (1-7), где 1 соответствует понедельнику |
%U | Номер недели в году, считая воскресенье первым днем недели (00-53) |
%w | Номер дня недели в виде десятичного числа, начиная с воскресенья (0-6) |
%W | Номер недели в году, считая понедельник первым днем недели (00-53) |
%y | Год без века в виде десятичного числа (00-99) |
%Y | Год с веком в виде десятичного числа |
%z | Смещение от UTC («-800» означает на 8 ч по Гринвичу западнее). |
%Z | Наименование часового пояса (если доступно) |
%% | % (то есть знак процента). |
Функция, позволяющая вывести день недели на русском языке
123456789101112131415161718192021222324252627282930313233343536373839
40
#define _CRT_SECURE_NO_WARNINGS#include #include #include #include #include char * settime(struct tm *u){
char s[40];
char *tmp; for (int i = 0; itm_wday) {
case 0: strcpy(s + length, » воскресенье»); break;
case 1: strcpy(s + length, » понедельник»); break; case 2: strcpy(s + length, » вторник»); break; case 3: strcpy(s + length, » среда»); break; case 4: strcpy(s + length, » четверг»); break; case 5: strcpy(s + length, » пятница»); break; case 6: strcpy(s + length, » суббота»); break; }
- tmp = (char*)malloc(sizeof(s));
- return(tmp);
- int main()
- struct tm *u;
strcpy(tmp, s);}{ char *f; system(«chcp 1251»); system(«cls»); const time_t timer = time(NULL); u = localtime(&timer); f = settime(u);
printf(«%ld соответствует «, timer);
puts(f); getchar();
return 0;
}
Добавление нескольких дней к текущему времени
Рассмотрим еще один пример. Допустим, требуется добавить несколько дней к текущей дате.
Реализация на Си
12345678910111213141516171819
20
#define _CRT_SECURE_NO_WARNINGS#include #include #define ADD_DAYS 300int main(){
struct tm *u;
char s1[40] = { 0 }, s2[40] = { 0 }; const time_t timer = time(NULL); u = localtime(&timer);
strftime(s1, 80, «%d.%m.%Y %H:%M:%S «, u);
printf(«%s
«, s1); u->tm_mday += ADD_DAYS; time_t next = mktime(u); u = localtime(&next);
strftime(s2, 80, «%d.%m.%Y %H:%M:%S «, u);
printf(«%s
«, s2); getchar();
return 0;
}
Результат выполнения
Реализация функции задержки
#include #include void delay(int ms) // аргумент- требуемое время задержки в миллисекундах{
int c = clock() + ms;
while (clock()
Источник: https://prog-cpp.ru/c-time-date/
C#: дата и время
Для работы с датой и временем в пространстве имен System предусмотрено три неизменяемых структуры: DateTime, DateTimeOffset и TimeSpan.
TimeSpan
Структура TimeSpan представляет временной интервал или время суток. В последнем случае это время (без даты) прошедшее с полуночи (без учет переходов на летнее время). Минимально значение для TimeSpan — 100 наносекунд, максимальное — примерно 10 миллионов дней (значение может быть и положительным, и отрицательным).
Создать экземпляр TimeSpan можно с помощью конструктора, вызвав один из статических методов From…, либо путем вычитания одного экземпляра DateTime из другого.
Предусмотрено 4 перегруженных конструктора:
public TimeSpan (int hours, int minutes, int seconds);
public TimeSpan (int days, int hours, int minutes, int seconds);
public TimeSpan (int days, int hours, int minutes, int seconds, int milliseconds);
public TimeSpan (long ticks); // Каждый tick = 100ns
public TimeSpan (int hours, int minutes, int seconds);public TimeSpan (int days, int hours, int minutes, int seconds);public TimeSpan (int days, int hours, int minutes, int seconds, int milliseconds);public TimeSpan (long ticks); // Каждый tick = 100ns |
Статические методы From… более удобны когда нужно указать интервал в каких-то одних единицах (минутах, секундах):
public static TimeSpan FromDays (double value);
public static TimeSpan FromHours (double value);
public static TimeSpan FromMinutes (double value);
public static TimeSpan FromSeconds (double value);
public static TimeSpan FromMilliseconds (double value);
public static TimeSpan FromDays (double value);public static TimeSpan FromHours (double value);public static TimeSpan FromMinutes (double value);public static TimeSpan FromSeconds (double value);public static TimeSpan FromMilliseconds (double value); |
Пример:
Console.WriteLine (new TimeSpan (2, 30, 0)); // 02:30:00
Console.WriteLine (TimeSpan.FromHours (2.5)); // 02:30:00
Console.WriteLine (TimeSpan.FromHours (−2.5)); // −02:30:00
Console.WriteLine (new TimeSpan (2, 30, 0)); // 02:30:00Console.WriteLine (TimeSpan.FromHours (2.5)); // 02:30:00Console.WriteLine (TimeSpan.FromHours (−2.5)); // −02:30:00 |
TimeSpan перегружает операторы , + и -:
TimeSpan.FromHours(2) + TimeSpan.FromMinutes(30); // 2,5 часа
TimeSpan.FromDays(10) — TimeSpan.FromSeconds(1); // 9.23:59:59
TimeSpan.FromHours(2) + TimeSpan.FromMinutes(30); // 2,5 часаTimeSpan.FromDays(10) — TimeSpan.FromSeconds(1); // 9.23:59:59 |
TimeSpan содержит свойства Days, Hours, Minutes, Seconds и Milliseconds, возвращающие соответствующие целочисленные значения, а также аналогичные свойства Total…, возвращающие значения типа double:
TimeSpan nearlyTenDays = TimeSpan.FromDays(10) — TimeSpan.FromSeconds(1);
Console.WriteLine (nearlyTenDays.Days); // 9
Console.WriteLine (nearlyTenDays.Hours); // 23
Console.WriteLine (nearlyTenDays.Minutes); // 59
Console.WriteLine (nearlyTenDays.Seconds); // 59
Console.WriteLine (nearlyTenDays.Milliseconds); // 0
Console.WriteLine (nearlyTenDays.TotalDays); // 9.99998842592593
Console.WriteLine (nearlyTenDays.TotalHours); // 239.999722222222
Console.WriteLine (nearlyTenDays.TotalMinutes); // 14399.9833333333
Console.WriteLine (nearlyTenDays.TotalSeconds); // 863999
Console.WriteLine (nearlyTenDays.TotalMilliseconds); // 863999000
TimeSpan nearlyTenDays = TimeSpan.FromDays(10) — TimeSpan.FromSeconds(1);Console.WriteLine (nearlyTenDays.Days); // 9Console.WriteLine (nearlyTenDays.Hours); // 23Console.WriteLine (nearlyTenDays.Minutes); // 59Console.WriteLine (nearlyTenDays.Seconds); // 59Console.WriteLine (nearlyTenDays.Milliseconds); // 0Console.WriteLine (nearlyTenDays.TotalDays); // 9.99998842592593Console.WriteLine (nearlyTenDays.TotalHours); // 239.999722222222Console.WriteLine (nearlyTenDays.TotalMinutes); // 14399.9833333333Console.WriteLine (nearlyTenDays.TotalSeconds); // 863999Console.WriteLine (nearlyTenDays.TotalMilliseconds); // 863999000 |
Статический метод Parse является противоположностью ToString, преобразуя строку в TimeSpan. Метод TryParse делает тоже самое, но в случае неудачи возвращает false вместо генерации исключения.
Значением по умолчанию для TimeSpan является TimeSpan.Zero.
DateTime и DateTimeOffset
DateTime и DateTimeOffset — это неизменяемые структуры для представления даты и времени. Поддерживаемый диапазон лет — от 0001 до 9999, а минимальный шаг (tick) — 100 наносекунд.
Структуры отличаются по своему внутреннему строению и тем, как они обрабатывают часовые пояса. DateTime состоит из двух порций информации:
- 62-битное число, указывающее количество tick, прошедшее с 1/1/001
- 2-битное значение enum — флаг DateTimeKind с тремя состояниями, который указывает, относительно чего берется DateTime:
- Local — местное время на текущем компьютере
- Utc — UTC (современный эквивалент Гринвича)
- Unspecified — не определено — принимается по умолчанию и означает, что DateTime не зависит от часового пояса
Таким образом экземпляр DateTime не содержит информации о конкретном часовом поясе и не хранит числовое смещение UTC. Во время сравнения DateTime сравнивает только значения ticks, игнорируя флаг с тремя состояниями и считает, что два значения равны, если они имеют одинаковый год, месяц, день, часы, минуты и т.д.
Структура DateTimeOffset внутри содержит:
- поле DateTime, значение которого всегда представлено относительно UTC
- 16-битное целочисленное поле Offset (тип TimeSpan), выражающее смещение относительно UTC в минутах
Во время сравнения DateTimeOffset сравнивает только поле DateTime (которое в UTC), Offset игнорируется. Таким образом DateTimeOffset считает два значения равными, если они ссылаются на одну и туже точку во времени.
Исходя из этого, DateTime считает следующие два значения различными, а DateTimeOffset — равными:
July 01 2007 09:00:00 +00:00
July 01 2007 03:00:00 −06:00
July 01 2007 09:00:00 +00:00July 01 2007 03:00:00 −06:00 |
Создание экземпляра DateTime
DateTime определяет два конструктора, которые принимают целочисленные значения для года, месяца и дня, а также дополнительно — для часов, минут, секунд и миллисекунд:
public DateTime (int year, int month, int day);
public DateTime (int year, int month, int day,
int hour, int minute, int second, int millisecond);
public DateTime (int year, int month, int day);public DateTime (int year, int month, int day, int hour, int minute, int second, int millisecond); |
Если указывается только дата, время неявно устанавливается в полночь (0:00). Также конструктор DateTime позволяет задать указанный выше флаг DateTimeKind:
DateTime dt1 = new DateTime (2000, 1, 1, 10, 20, 30, DateTimeKind.Local);
DateTime dt2 = new DateTime (2000, 1, 1, 10, 20, 30, DateTimeKind.Utc);
DateTime dt1 = new DateTime (2000, 1, 1, 10, 20, 30, DateTimeKind.Local);DateTime dt2 = new DateTime (2000, 1, 1, 10, 20, 30, DateTimeKind.Utc); |
Перегруженный конструктор DateTime может принимать объект Calendar (System.Globalization), позволяя задать используемый календарь:
Источник: https://blog.rc21net.ru/csharp-date-and-time/
Типы данных для даты и времени
Типы данных для представления даты и времени используются для значений, которые содержат, как понятно из названия, дату и время.
Данные даты (date)
Дата при использовании типа date определяется в формате «ГГГГ-ММ-ДД», где:
- ГГГГ — год
- ММ — месяц
- ДД — день
Примечание: Все компоненты обязательны!
В XML схеме декларация данных, представляющих дату, выглядит следующим образом:
В XML документе такой элемент должен выглядеть так:
2002-09-24
Временные зоныЧтобы определить временную зону, можно либо указать дату с добавлением после нее литеры «Z», что укажет на поправку зоны UTC:
2002-09-24Z
либо после даты указать смещение времени от зоны UTC в виде отрицательного или положительного числа:
2002-09-24-06:00
или
2002-09-24+06:00
Данные времени (time)
Время определяется в формате «чч:мм:сс», где:
- чч — часы
- мм — минуты
- сс — секунды
Примечание: Все компоненты обязательны!
В XML схеме декларация данных, представляющих время, выглядит следующим образом:
В XML документе такой элемент должен выглядеть так:
09:00:00
Или так:
09:30:10.5
Временные зоныЧтобы определить временную зону, можно либо указать время с добавлением после него литеры «Z», что укажет на поправку зоны UTC:
09:30:10Z
либо после времени указать смещение от зоны UTC в виде отрицательного или положительного числа:
09:30:10-06:00
или
09:30:10+06:00
Тип данных dateTime
Тип данных dateTime используется для определения даты и времени.
Значения типа dateTime имеют формат «ГГГГ-ММ-ДДTчч:мм:сс», где:
- ГГГГ — год
- ММ — месяц
- ДД — день
- T — указывает на начало данных времени
- чч — час
- мм — минуты
- сс — секунды
Примечание: Все компоненты обязательны!
В XML схеме декларация данных типа dateTime выглядит следующим образом:
В XML документе такой элемент должен выглядеть так:
2002-05-30T09:00:00
Или так:
2002-05-30T09:30:10.5
Временные зоныЧтобы определить временную зону, можно либо указать данные dateTime с добавлением после них литеры «Z», что укажет на поправку зоны UTC:
2002-05-30T09:30:10Z
либо после времени указать смещение от зоны UTC в виде отрицательного или положительного числа:
2002-05-30T09:30:10-06:00
или
2002-05-30T09:30:10+06:00
Данные о продолжительности
Типы данных о продолжительности используются для определения интервалов времени.
Интервал времени определяется в формате «PnYnMnDTnHnMnS», где:
- P указывает период (обязателен)
- nY указывает число лет
- nM указывает число месяцев
- nD указывает число дней
- T указывает на начало раздела с временем (обязателен, если будут определяться часы, минуты или секунды)
- nH указывает количество часов
- nM указывает количество минут
- nS указывает количество секунд
В XML схеме декларация интервала времени выглядит следующим образом:
В XML документе такой элемент должен выглядеть так:
P5Y
В приведенном выше примере указан период в пять лет.
Или элемент должен выглядеть так:
P5Y2M10D
В этом примере указан период в пять лет, два месяца и 10 дней.
Или элемент должен выглядеть так:
P5Y2M10DT15H
В этом примере указан период в 5 лет, 2 месяца, 10 дней и 15 часов.
Или элемент должен выглядеть так:
PT15H
Здесь указан период в 15 часов.
Отрицательная продолжительностьЧтобы определить отрицательный период времени, необходимо перед P поставить знак минуса:
-P10D
В этом примере указан период в минус 10 дней.
Типы данных, определяющие дату и время
date | Определяет дату |
dateTime | Определяет дату и время |
duration | Определяет интервал времени |
gDay | Определяет часть даты — день (ДД) |
gMonth | Определяет часть даты — месяц (MM) |
gMonthDay | Определяет часть даты — месяц и день (MM-ДД) |
gYear | Определяет часть даты — год (ГГГГ) |
gYearMonth | Определяет часть даты — год и месяц (ГГГГ-MM) |
time | Определяет время |
Ограничения по данным даты и времени
С данными даты и времени могут использоваться следующие ограничители:
- enumeration
- maxExclusive
- maxInclusive
- minExclusive
- minInclusive
- pattern
- whiteSpace
Источник: https://msiter.ru/tutorials/uchebnik-po-xml-shemam/tipy-dannyh-dlya-daty-i-vremeni
Типы данных даты и времени
- Столбцы данного типа используются для записи дат, времени и их комбинаций.
- Типы данных DATETIME, DATE, TIME
- Тип данных DATETIME используется для величин, содержащих информацию как о дате, так и о времени в формате 'YYYY-MM-DD HH:MM:SS'
Тип данных DATE используется для величин с информацией только о дате в формате 'YYYY-MM-DD'. Поддерживается диапазон величин от '1000-01-01' до '9999-12-31'.
Тип данных TIME используется для хранения значений времени в формате HH.MM.SS[.ssss]
Тип данных YEAR
MySQL Server поддерживает однобайтный тип данных YEAR, предназначенный для представления значений года в формате YYYY. Диапазон возможных значений — от 1901 до 2155.
Величины типа YEAR могут быть заданы в различных форматах:
- Как четырехзначная строка в интервале значений от '1901' до '2155'.
- Как четырехзначное число в интервале значений от 1901 до 2155.
- Как двухзначная строка в интервале значений от '00' до '99'. Величины в интервалах от '00' до '69' и от '70' до '99' при этом преобразуются в величины YEAR в интервалах от 2000 до 2069 и от 1970 до 1999 соответственно.
- Как двухзначное число в интервале значений от 1 до 99. Величины в интервалах от 1 до 69 и от 70 до 99 при этом преобразуются в величины YEAR в интервалах от 2001 до 2069 и от 1970 до 1999 соответственно. Необходимо принять во внимание, что интервалы для двухзначных чисел и двухзначных строк несколько различаются, так как нельзя указать «ноль'' непосредственно как число и интерпретировать его как 2000. Необходимо задать его как строку '0' или '00', или же оно будет интерпретировано как 0000.
Недопустимые величины YEAR преобразуются в 0000.
Тип данных TIMESTAMP
Назначение типа данных timestamp в MS SQL Server и MySQL Server значительно отличается.
В языке Transcat SQL, используемом в MS SQL Server тип данных, TIMESTAMP представляет собой автоматически сформированные уникальные двоичные числа. При произведении любых изменений в строке значение TIMESTAMP будет обновлено.
Таким образом, столбец типа TIMESTAMP можно использовать, чтобы определить, было ли произведено изменение какого-либо значения в строке с момента ее последнего считывания. В таблице может быть только один столбец типа TIMESTAMP.
В MySQL Server тип столбца TIMESTAMP используется для автоматической записи текущих даты и времени при выполнении операций вставки или обновления.
Допускается наличие нескольких столбцов типа TIMESTAMP в таблице, но в этом случае автоматически обновляется только первый из них.
Столбец типа TIMESTAMP можно установить в значение, отличное от текущих даты и времени путем явного указания значения столбца при выполнении операций вставке и обновлении данных.
Источник: https://dspace.ut.ee/bitstream/handle/10062/14738/____1.html
C ++ — Дата и время
Стандартная библиотека C ++ не предоставляет правильный тип даты. C ++ наследует структуры и функции для обработки дат и времени из C. Чтобы получить доступ к функциям и структурам, связанным с датой и временем, вам нужно будет включить заголовочный файл в вашей программе на C ++.
Существует четыре типа времени: clock_t, time_t, size_t и tm . Типы — clock_t, size_t и time_t могут представлять системное время и дату как некоторое целое число.
Тип структуры tm содержит дату и время в виде структуры C, имеющей следующие элементы:
struct tm {
int tm_sec; // seconds of minutes from 0 to 61
int tm_min; // minutes of hour from 0 to 59
int tm_hour; // hours of day from 0 to 24
int tm_mday; // day of month from 1 to 31
int tm_mon; // month of year from 0 to 11
int tm_year; // year since 1900
int tm_wday; // days since sunday
int tm_yday; // days since January 1st
int tm_isdst; // hours of daylight savings time
}
Ниже приведены важные функции, которые мы используем при работе с датой и временем на C или C ++. Все эти функции являются частью стандартной библиотеки C и C ++, и вы можете проверить их детали, используя ссылку на стандартную библиотеку C ++, приведенную ниже.
time_t time (time_t * time); | Это возвращает текущее время календаря системы в количестве секунд, прошедших с 1 января 1970 года. Если система не имеет времени, возвращается .1. |
char * ctime (const time_t * time); | Это возвращает указатель на строку формы день месяц год: минуты: секунды год n 0 . |
struct tm * localtime (const time_t * time); | Это возвращает указатель на структуру tm, представляющую локальное время. |
clock_t clock (void); | Это возвращает значение, которое приблизительно соответствует времени, в течение которого вызываемая программа была запущена. Значение, равное .1, возвращается, если время недоступно. |
char * asctime (const struct tm * time); | Это возвращает указатель на строку, содержащую информацию, хранящуюся в структуре, на которую указывает время, преобразованное в форму: day month date hours: minutes: seconds year n 0 |
struct tm * gmtime (const time_t * time); | Это возвращает указатель на время в виде структуры tm. Время представлено в скоординированном универсальном времени (UTC), которое по сути является средним временем по Гринвичу (GMT). |
time_t mktime (struct tm * time); | Это возвращает эквивалент календарного времени времени, найденного в структуре, на которую указывает время. |
double difftime (time_t time2, time_t time1); | Эта функция вычисляет разницу в секундах между временем 1 и временем 2. |
size_t strftime (); | Эта функция может использоваться для форматирования даты и времени в определенном формате. |
Текущая дата и время
Предположим, вы хотите получить текущую системную дату и время, либо в качестве локального времени, либо в качестве скоординированного универсального времени (UTC). Ниже приведен пример для достижения того же:
Источник: http://unetway.com/tutorial/c-data-i-vrema/
XSD Дата и время Типы данных
Дата и время типы данных используются для значений, которые содержат дату и время.
Дата Тип данных
Тип дата данные используются, чтобы указать дату.
Дата указывается в следующем виде «YYYY-MM-DD» , где:
- YYYY указывает год
- ММ указывает месяц
- DD означает день
Note: Все компоненты необходимы!
Ниже приведен пример дату декларации в схеме:
Элемент в документе может выглядеть следующим образом:
2002-09-24
Часовые пояса
Чтобы указать часовой пояс, вы можете либо ввести дату в время UTC путем добавления «Z» за сегодняшний день — как это:
2002-09-24Z
или вы можете задать смещение от времени UTC путем добавления положительного или отрицательного времени за сегодняшний день — как это:
2002-09-24-06:00 or
2002-09-24+06:00
Время Тип данных
Тип данных в реальном времени используется для указания времени.
Время указывается в следующей форме «hh:mm:ss» , где:
- чч указывает на час
- мм указывает на минуту
- сс указывает второй
Note: Все компоненты необходимы!
Ниже приведен пример временной декларации в схеме:
Элемент в документе может выглядеть следующим образом:
Или это может выглядеть следующим образом:
09:30:10.5
Часовые пояса
Чтобы указать часовой пояс, вы можете либо ввести время во времени UTC, добавив «Z» за время — как это:
или вы можете задать смещение от времени UTC путем добавления положительного или отрицательного времени за время — как это:
09:30:10-06:00 or
09:30:10+06:00
DateTime Тип данных
Тип данных DATETIME используется для указания даты и времени.
DATETIME задается в следующем виде «YYYY-MM-DDThh:mm:ss» , где:
- YYYY указывает год
- ММ указывает месяц
- DD означает день
- T указывает на начало требуемого времени раздела
- чч указывает на час
- мм указывает на минуту
- сс указывает второй
Note: Все компоненты необходимы!
Ниже приведен пример декларации DATETIME в схеме:
Элемент в документе может выглядеть следующим образом:
2002-05-30T09:00:00
Или это может выглядеть следующим образом:
2002-05-30T09:30:10.5
Часовые пояса
Чтобы указать часовой пояс, вы можете либо ввести DATETIME во времени UTC, добавив «Z» за время — как это:
2002-05-30T09:30:10Z
или вы можете задать смещение от времени UTC путем добавления положительного или отрицательного времени за время — как это:
2002-05-30T09:30:10-06:00 or
2002-05-30T09:30:10+06:00
Продолжительность Тип данных
Тип данных продолжительность используется для задания интервала времени.
Интервал времени задается в следующем виде «PnYnMnDTnHnMnS» , где:
- P указывает период (required)
- nY указывает количество лет
- nM указывает на количество месяцев
- nD указывает количество дней
- T указывает на начало временного интервала (требуется , если вы собираетесь указать часы, минуты или секунды)
- nH указывает количество часов
- nM указывает количество минут
- nS указывает количество секунд
Ниже приведен пример объявления длительности в схеме:
- Элемент в документе может выглядеть следующим образом:
- Приведенный выше пример показывает, в течение пяти лет.
- Или это может выглядеть следующим образом:
P5Y2M10D
Приведенный выше пример показывает, в течение пяти лет, два месяца и 10 дней.
Или это может выглядеть следующим образом:
P5Y2M10DT15H
- Приведенный выше пример показывает, в течение пяти лет, два месяца, 10 дней и 15 часов.
- Или это может выглядеть следующим образом:
- Приведенный выше пример показывает, в течение 15 часов.
Отрицательная Длительность
Чтобы указать отрицательную продолжительность, введите знак минус перед P:
В приведенном выше примере указывает период минус 10 дней.
Дата и время Типы данных
date | Определяет значение даты |
dateTime | Определяет значение даты и времени |
duration | Определяет интервал времени |
gDay | Определяет часть даты — день (DD) |
gMonth | Определяет часть даты — месяц (MM) |
gMonthDay | Определяет часть даты — месяц и день (MM-DD) |
gYear | Определяет часть даты — год (YYYY) |
gYearMonth | Определяет часть даты — год и месяц (YYYY-MM) |
time | Определяет значение времени |
Ограничения по типам данных Дата
Ограничения, которые могут использоваться с типами данных Дата:
- enumeration
- maxExclusive
- maxInclusive
- minExclusive
- minInclusive
- pattern
- whiteSpace
Источник: https://www.w3bai.com/ru/xml/schema_dtypes_date.html
Типы данных DATETIME, DATE и TIMESTAMP
Типы DATETIME, DATE и TIMESTAMP являются родственными типами данных. В данном разделе описаны их свойства, общие черты и различия.
Тип данных DATETIME используется для величин, содержащих информацию как о дате, так и о времени. MySQL извлекает и выводит величины DATETIME в формате 'YYYY-MM-DD HH:MM:SS'.
Поддерживается диапазон величин от '1000-01-01 00:00:00' до '9999-12-31 23:59:59'.
(''поддерживается'' означает, что хотя величины с более ранними временными значениями, возможно, тоже будут работать, но нет гарантии того, что они будут правильно храниться и отображаться).
Тип DATE используется для величин с информацией только о дате, без части, содержащей время. MySQL извлекает и выводит величины DATE в формате 'YYYY-MM-DD'. Поддерживается диапазон величин от '1000-01-01' до '9999-12-31'.
Тип столбца TIMESTAMP обеспечивает тип представления данных, который можно использовать для автоматической записи текущих даты и времени при выполнении операций INSERT или UPDATE. При наличии нескольких столбцов типа TIMESTAMP только первый из них обновляется автоматически.
Автоматическое обновление первого столбца с типом TIMESTAMP происходит при выполнении любого из следующих условий:
- Столбец не указан явно в команде INSERT или LOAD DATA INFILE.
- Столбец не указан явно в команде UPDATE, и при этом изменяется величина в некотором другом столбце (следует отметить, что команда UPDATE, устанавливающая столбец в то же самое значение, которое было до выполнения команды, не вызовет обновления столбца TIMESTAMP, поскольку в целях повышения производительности MySQL игнорирует подобные обновления при установке столбца в его текущее значение).
- Величина в столбце TIMESTAMP явно установлена в NULL.
Для остальных (кроме первого) столбцов типа TIMESTAMP также можно задать установку в значение текущих даты и времени. Для этого необходимо просто установить столбец в NULL или в NOW().
Любой столбец типа TIMESTAMP (даже первый столбец данного типа) можно установить в значение, отличное от текущих даты и времени. Это делается путем явной установки его в желаемое значение.
Данное свойство можно использовать, например, если необходимо установить столбец TIMESTAMP в значение текущих даты и времени при создании строки, а при последующем обновлении этой строки значение столбца не должно изменяться:
- Пусть MySQL автоматически установит значение столбца с типом TIMESTAMP при создании данной строки. Столбец будет установлен в исходное состояние со значением текущих даты и времени.
- При выполнении последующих обновлений других столбцов в данной строке необходимо явно установить столбец TIMESTAMP в его текущее значение.
Однако, с другой стороны, для этих целей, возможно, будет проще использовать столбец DATETIME. При создании строки его следует инициализировать функцией NOW() и оставить в покое при последующих обновлениях.
Величины типа TIMESTAMP могут принимать значения от начала 1970 года до некоторого значения в 2037 году с разрешением в одну секунду. Эти величины выводятся в виде числовых значений.
Формат данных, в котором MySQL извлекает и показывает величины TIMESTAMP, зависит от количества показываемых символов. Это проиллюстрировано в приведенной ниже таблице. Полный формат TIMESTAMP составляет 14 десятичных разрядов, но можно создавать столбцы типа TIMESTAMP и с более короткой строкой вывода:
Тип столбца | Формат вывода |
TIMESTAMP(14) | YYYYMMDDHHMMSS |
TIMESTAMP(12) | YYMMDDHHMMSS |
TIMESTAMP(10) | YYMMDDHHMM |
TIMESTAMP(8) | YYYYMMDD |
TIMESTAMP(6) | YYMMDD |
TIMESTAMP(4) | YYMM |
TIMESTAMP(2) | YY |
Независимо от размера выводимого значения размер данных, хранящихся в столбцах типа TIMESTAMP, всегда один и тот же. Чаще всего используется формат вывода с 6, 8, 12 или 14 десятичными знаками.
При создании таблицы можно указать произвольный размер выводимых значений, однако если этот размер задать равным 0 или превышающим 14, то будет использоваться значение 14.
Нечетные значения размеров в интервале от 1 до 13 будут приведены к ближайшему большему четному числу.
Величины DATETIME, DATE и TIMESTAMP могут быть заданы любым стандартным набором форматов:
- Как строка в формате 'YYYY-MM-DD HH:MM:SS' или в формате 'YY-MM-DD HH:MM:SS'. Допускается «облегченный» синтаксис — можно использовать любой знак пунктуации в качестве разделительного между частями разделов даты или времени. Например, величины '98-12-31 11:30:45', '98.12.31 11+30+45', '98/12/31 11*30*45' и '98@12@31 11^30^45' являются эквивалентными.
- Как строка в формате 'YYYY-MM-DD' или в формате 'YY-MM-DD'. Здесь также допустим «облегченный» синтаксис. Например, величины '98-12-31', '98.12.31', '98/12/31' и '98@12@31' являются эквивалентными.
- Как строка без разделительных знаков в формате 'YYYYMMDDHHMMSS' или в формате 'YYMMDDHHMMSS', при условии, что строка понимается как дата. Например, величины '19970523091528' и '970523091528' можно интерпретировать как '1997-05-23 09:15:28', но величина '971122129015' является недопустимой (значение раздела минут является абсурдным) и преобразуется в '0000-00-00 00:00:00'.
- Как строка без разделительных знаков в формате 'YYYYMMDD' или в формате 'YYMMDD', при условии, что строка интерпретируется как дата. Например, величины '19970523' и '970523' можно интерпретировать как '1997-05-23', но величина '971332' является недопустимой (значения разделов месяца и дня не имеют смысла) и преобразуется в '0000-00-00'.
- Как число в формате YYYYMMDDHHMMSS или в формате YYMMDDHHMMSS, при условии, что число интерпретируется как дата. Например, величины 19830905132800 и 830905132800 интерпретируются как '1983-09-05 13:28:00'.
- Как число в формате YYYYMMDD или в формате YYMMDD, при условии, что число интерпретируется как дата. Например, величины 19830905 и 830905 интерпретируются как '1983-09-05'.
- Как результат выполнения функции, возвращающей величину, приемлемую в контекстах типов данных DATETIME, DATE или TIMESTAMP (например, функции NOW() или CURRENT_DATE().
Недопустимые значения величин DATETIME, DATE или TIMESTAMP преобразуются в значение «ноль» соответствующего типа величин ('0000-00-00 00:00:00', '0000-00-00', или 00000000000000).
Для величин, представленных как строки, содержащие разделительные знаки между частями даты, нет необходимости указывать два разряда для значений месяца или дня, меньших, чем 10.
Так, величина '1979-6-9' эквивалентна величине '1979-06-09'.
Аналогично, для величин, представленных как строки, содержащие разделительные знаки внутри обозначения времени, нет необходимости указывать два разряда для значений часов, минут или секунд, меньших, чем 10. Так,
Величины, определенные как числа, должны иметь 6, 8, 12, или 14 десятичных разрядов. Предполагается, что число, имеющее 8 или 14 разрядов, представлено в форматах YYYYMMDD или YYYYMMDDHHMMSS соответственно, причем год указан в первых четырех разрядах.
Если же длина числа 6 или 12 разрядов, то предполагаются соответственно форматы YYMMDD или YYMMDDHHMMSS, где год указан в первых двух разрядах.
Числа, длина которых не соответствует ни одному из описанных вариантов, интерпретируются как дополненные спереди нулями до ближайшей вышеуказанной длины.
Величины, представленные строками без разделительных знаков, интерпретируются с учетом их длины согласно приведенным далее правилам. Если длина строки равна 8 или 14 символам, то предполагается, что год задан первыми четырьмя символами.
В противном случае предполагается, что год задан двумя первыми символами. Строка интерпретируется слева направо, при этом определяются значения для года, месяца, дня, часов, минут и секунд для всех представленных в строке разделов.
Это означает, что строка с длиной меньше, чем 6 символов, не может быть использована. Например, если задать строку вида '9903', полагая, что это будет означать март 1999 года, то MySQL внесет в таблицу «нулевую» дату.
Год и месяц в данной записи равны 99 и 03 соответственно, но раздел, представляющий день, пропущен (значение равно нулю), поэтому в целом данная величина не является достоверным значением даты.
При хранении допустимых величин в столбцах типа TIMESTAMP используется полная точность, указанная при их задании, независимо от количества выводимых символов. Это свойство имеет несколько следствий:
- Необходимо всегда указывать год, месяц и день даже для типов TIMESTAMP(4) или TIMESTAMP(2). В противном случае задаваемая величина не будет допустимым значением даты и будет храниться как 0.
- При увеличении ширины узкого столбца TIMESTAMP путем использования команды ALTER TABLE будет выводиться ранее «скрытая» информация.
- И аналогично, при сужении столбца TIMESTAMP хранимая информация не будет потеряна, если не принимать во внимание, что при выводе информации будет выдаваться меньше.
- Хотя величины TIMESTAMP хранятся с полной точностью, непосредственно может работать с этим исходным хранимым значением величины только функция UNIX_TIMESTAMP(). Остальные функции оперируют форматированными значениями извлеченной величины. Это означает, что нельзя использовать такие функции, как HOUR() или SECOND(), пока соответствующая часть величины TIMESTAMP не будет включена в ее форматированное значение. Например, раздел HH столбца TIMESTAMP не будет выводиться, пока количество выводимых символов не станет по меньшей мере равным 10, так что попытки использовать HOUR() для более коротких величин TIMESTAMP приведут к бессмысленным результатам.
- Величины одного типа даты можно в ряде случаев присвоить объекту другого типа даты. Однако при этом возможны некоторое изменение величины или потеря информации:
- Если присвоить значение типа DATE объекту DATETIME или TIMESTAMP, то в результирующей величине «временная» часть будет установлена в '00:00:00', так как величина DATE не содержит информации о времени.
- Если присвоить значение типа DATE, DATETIME или TIMESTAMP объекту DATE, то «временная» часть в результирующей величине будет удалена, так как тип DATE не включает информацию о времени.
- Несмотря на то что все величины DATETIME, DATE и TIMESTAMP могут быть указаны с использованием одного и того же набора форматов, следует помнить, что указанные типы имеют разные интервалы допустимых значений. Например, величины типа TIMESTAMP не могут иметь значения даты более ранние, чем относящиеся к 1970 году или более поздние, чем относящиеся к 2037 году. Это означает, что такая дата, как '1968-01-01', будучи разрешенной для величины типа DATETIME или DATE, недопустима для величины типа TIMESTAMP и будет преобразована в 0 при присвоении этому объекту.
- Задавая величины даты, следует иметь в виду некоторые «подводные камни»:
- Упрощенный формат, который допускается для величин, заданных строками, может ввести в заблуждение. Например, такая величина, как '10:11:12', благодаря разделителю : могла бы оказаться величиной времени, но, используемая в контексте даты, она будет интерпретирована как год '2010-11-12'. В то же время величина '10:45:15' будет преобразована в '0000-00-00', так как для месяца значение '45' недопустимо.
- Сервер MySQL выполняет только первичную проверку истинности даты: дни 00-31, месяцы 00-12, года 1000-9999. Любая дата вне этого диапазона преобразуется в 0000-00-00. Следует отметить, что, тем не менее, при этом не запрещается хранить неверные даты, такие как 2002-04-31. Это позволяет веб-приложениям сохранять данные форм без дополнительной проверки. Чтобы убедиться в достоверности даты, выполняется проверка в самом приложении.
- Величины года, представленные двумя разрядами, допускают неоднозначное толкование, так как неизвестно столетие. MySQL интерпретирует двухразрядные величины года по следующим правилам:
- Величины года в интервале 00-69 преобразуются в 2000-2069.
- Величины года в интервале 70-99 преобразуются в 1970-1999.
Источник: https://mysqlru.com/reference/column-types/date-and-time-types/datetime.html
типы данных XML-схемы даты / времени
Дата и время типы данных для значений, которые содержат дату и время.
Тип данных Дата (дата Тип данных)
Дата тип данных используется для определения даты.
Дата Этот формат определяется: «YYYY-MM-DD», где:
- YYYY указывает год
- ММ месяц
- DD представляет собой число дней
Примечание: Все компоненты необходимы
Ниже приводится утверждение о примерах даты схемы:
Элементы в документе должны выглядеть следующим образом:
2002-09-24
Временная зона
Чтобы указать часовой пояс, вы можете также добавить дату в «Z» способом, с использованием мирового времени (UTC) время для ввода даты — как это:
2002-09-24Z
Или такая более поздняя дата может быть, добавив в него положительные или отрицательные методы времени для корректировки положения в мире, основанные на смещении времени — как это:
2002-09-24-06:00 或者
2002-09-24+06:00
H3> Типы временных данных (Time Тип данных)
Тип данных Время используется для определения времени.
Время определяется с помощью следующий формат: «чч: мм: сс», который
- чч это час
- мм минута
- сс представляет секунды
Примечание: Все компоненты необходимы!
Ниже приведен пример времени в соответствующей декларации схемы:
Элементы в документе должны выглядеть следующим образом:
Или как это:
09:30:10.5
Временная зона
Чтобы указать часовой пояс, вы можете добавить во времени после того, как «Z» способом, с использованием мирового времени (UTC) время, чтобы ввести время — как это:
Или может быть создана после того, как время, чтобы добавить положительные или отрицательные методы времени для адаптации положений в мире на основе сдвига по времени — как это:
09:30:10-06:00 or
09:30:10+06:00
Дата Время Тип данных (DateTime Тип данных)
Datetime тип данных используется для определения даты и времени.
Дата и время, используя следующее определение формата: «YYYY-MM-ДДTчч: мм: сс», где:
- YYYY указывает год
- ММ месяц
- DD это день
- T указывает начальную часть времени, необходимый
- чч это час
- мм минута
- сс представляет секунды
Примечание: Все компоненты необходимы!
Ниже приведен пример схемы, связанной с датой и временем говорилось:
Элементы в документе должны выглядеть следующим образом:
2002-05-30T09:00:00
Или как это:
2002-05-30T09:30:10.5
Временная зона
Чтобы указать часовой пояс, вы можете также добавить дату и время в «Z» способом, с использованием мирового времени (UTC) время, чтобы ввести дату и время — как это:
2002-05-30T09:30:10Z
Или может быть создана после того, как время, чтобы добавить положительные или отрицательные методы времени для адаптации положений в мире на основе сдвига по времени — как это:
2002-05-30T09:30:10-06:00 或者
2002-05-30T09:30:10+06:00
H3> Типы данных продолжительность (длительность Тип данных)
Тип данных на время заранее определенного интервала времени.
Интервал, используя следующий формат, чтобы указать: «PnYnMnDTnHnMnS», в котором:
- P представляет собой цикл (обязательно)
- Ny представляет число лет
- нмоль указывает на количество месяцев
- Н.Д. представляет количество дней
- Т представляет временную часть первоначального (если вы планируете определенные часы, минуты и секунды, этот параметр является обязательным)
- нГн указывает количество часов
- нмоль количество минут
- нСм количество секунд,
Ниже приведен пример схемы, связанной с продолжительностью декларации:
- Элементы в документе должны выглядеть следующим образом:
- Приведенный выше пример показывает период пятилетний.
- Или как это:
P5Y2M10D
Приведенный выше пример показывает 5 лет, 2 месяца и 10 дней цикла.
Или как это:
P5Y2M10DT15H
- Приведенный выше пример показывает 5 лет, 2 месяца, 10 дней и 15 часов период.
- Или как это:
- Приведенный выше пример показывает период 15 часов.
Отрицательная продолжительность
Чтобы указать отрицательную продолжительность, введите знак минус перед P:
Приведенный выше пример показывает отрицательный результат 10-дневного цикла.
Дата и время типы данных
дата | Определить значение даты |
DATETIME | Определите значение даты и времени |
продолжительность | Определяет интервал времени |
Gday | Часть определения даты — день (DD) |
gMonth | Часть определения даты — месяц (ММ) |
gMonthDay | Часть определения даты — месяц и день (ММ-ДД) |
gYear | Часть определения даты — год (YYYY) |
gYearMonth | Часть определения даты — год и месяц (YYYY-MM) |
время | Определите значение времени |
Тип данных Дата определяется (ограничение)
Может использоваться в сочетании с типом данных даты определяется:
- перечисление
- maxExclusive
- maxInclusive
- minExclusive
- minInclusive
- шаблон
- WHITESPACE
Источник: https://www.w3big.com/ru/schema/schema-dtypes-date.html
Работа с датой и временем в 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, которая содержит столбцы номера заказа, заказанного товара, даты заказа и даты доставки заказа:
CREATE TABLE `MySampleDB`.`orders` (
`order_no` INT NOT NULL AUTO_INCREMENT,
`order_item` TEXT NOT NULL,
`order_date` DATETIME NOT NULL,
`order_delivery` DATE NOT NULL,
PRIMARY KEY (`order_no`)
)
ENGINE = InnoDB;
Столбец ORDER_DATE — это поле типа MySQL DATE TIME, в которое мы записываем дату и время, когда был сделан заказ. Для даты доставки невозможно предсказать точное время, поэтому мы записываем только дату.
Наиболее часто используемым разделителем для дат является тире (—), а для времени — двоеточие (:). Но мы можем использовать любой символ, или вообще не добавлять никакого символа.
Например, все следующие форматы являются правильными:
2008-10-23 10:37:22
20081023103722
2008/10/23 10.37.22
2008*10*23*10*37*22
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 NOW();
+———————+
| NOW() |
+———————+
| 2007-10-23 11:46:31 |
+———————+
1 row in set (0.00 sec)
- Вы можете попробовать сочетание нескольких функций в одном запросе (например, чтобы найти день недели):
mysql> SELECT MONTHNAME(NOW()); - +——————+
| MONTHNAME(NOW()) |
+——————+
| October |
+——————+ - 1 row in set (0.00 sec)
Рассмотрим, как вносятся значения date MySQL в таблицу. Чтобы продемонстрировать это, мы продолжим использовать таблицу orders, которую создали в начале статьи.
Мы начнем с добавления новой строки заказа. Значение поля order_no будет автоматически увеличиваться на 1, так что нам остается вставить значения order_item, дату создания заказа и дату доставки. Дата заказа — это время, в которое вставляется заказ, поэтому мы можем использовать функцию NOW(), чтобы внести в строку текущую дату и время.
Дата доставки — это период времени после даты заказа, которую мы можем вернуть, используя функцию MySQL DATE_ADD(), которая принимает в качестве аргументов дату начала (в нашем случае NOW ()) и INTERVAL (в нашем случае 14 дней). Например:
INSERT INTO orders (order_item, order_date, order_delivery)
VALUES ('iPhone 8Gb', NOW(), DATE_ADD(NOW(), INTERVAL 14 DAY));
Данный запрос создает заказ для указанного элемента с датой, временем выполнения заказа, и интервалом через две недели после этого в качестве даты доставки:
mysql> SELECT * FROM orders;
+———-+————+———————+—————-+
| order_no | order_item | order_date | order_delivery |
+———-+————+———————+—————-+
| 1 | iPhone 8Gb | 2007-10-23 11:37:55 | 2007-11-06 |
+———-+————+———————+—————-+
1 row in set (0.00 sec)
Точно так же можно заказать товар с датой доставки через два месяца:
mysql> INSERT INTO orders (order_item, order_date, order_delivery) VALUES ('ipod Touch 4Gb', NOW(), DATE_ADD(NOW(), INTERVAL 2 MONTH));
Query OK, 1 row affected (0.00 sec)
mysql> SELECT * FROM orders;
+———-+—————-+———————+—————-+
| order_no | order_item | order_date | order_delivery |
+———-+—————-+———————+—————-+
| 1 | iPhone 8Gb | 2007-10-23 11:37:55 | 2007-11-06 |
| 2 | ipod Touch 4Gb | 2007-10-23 11:51:09 | 2007-12-23 |
+———-+—————-+———————+—————-+
2 rows in set (0.00 sec)
В MySQL мы можем отфильтровать извлеченные данные в зависимости от даты и времени. Например, мы можем извлечь только те заказы, доставка которых запланирована на ноябрь:
mysql> SELECT * FROM orders WHERE MONTHNAME(order_delivery) = 'November';
+———-+————+———————+—————-+
| order_no | order_item | order_date | order_delivery |
+———-+————+———————+—————-+
| 1 | iPhone 8Gb | 2007-10-23 11:37:55 | 2007-11-06 |
+———-+————+———————+—————-+
1 row in set (0.00 sec)
Точно так же мы можем использовать BETWEEN, чтобы выбрать товары, доставка которых произойдет между двумя указанными датами. Например:
mysql> SELECT * FROM orders WHERE order_delivery BETWEEN '2007-12-01' AND '2008-01-01';
+———-+—————-+———————+—————-+
| order_no | order_item | order_date | order_delivery |
+———-+—————-+———————+—————-+
| 2 | ipod Touch 4Gb | 2007-10-23 11:51:09 | 2007-12-23 |
+———-+—————-+———————+—————-+
1 row in set (0.03 sec)
В этой статье мы рассмотрели форматы, используемые для определения даты и времени, и перечислили функции, используемые в для операций в MySQL с тип DATE. А также несколько примеров внесения и извлечения данных.
Данная публикация представляет собой перевод статьи «Working with Dates and Times in MySQL» , подготовленной дружной командой проекта Интернет-технологии.ру
Источник: https://www.internet-technologies.ru/articles/rabota-s-datoy-i-vremenem-v-mysql.html