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

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

Последнее обновление: 01.12.2021

SQLite имеет ряд встроенных функций для работы с датами и временем:

  • DATE() возвращает дату в формате "YYYY-MM-DD". Имеет следующее определение:

    date(time-value, modifier, modifier, ...)
  • TIME() вычисляет время. Имеет следующее определение:

    time(time-value, modifier, modifier, ...)
  • DATETIME() вычисляет дату и время. Имеет следующее определение:

    datetime(time-value, modifier, modifier, ...)
  • JULIANDAY() возвращает количество дней с момента начала юлианского периода (24 ноября 4714 до н.э.) в виде значения REAL. Имеет следующее определение:

    julianday(time-value, modifier, modifier, ...)
  • STRFTIME() форматирует дату. Имеет следующее определение:

    strftime(format, time-value, modifier, modifier, ...) 

Если первым четырем функциям не передаются параметры, то они вычисляют текущие дату и время:

SELECT date() AS date, 
	time() AS time,
	datetime() AS datetime,
	julianday() AS julian;
Функции DATE, DATETIME и TIME и получение текущей даты в SQLite

Установка даты и времени

В качестве параметра time-value эти функций могут получать дату и время в следующих форматах:

  • YYYY-MM-DD

  • YYYY-MM-DD HH:MM

  • YYYY-MM-DD HH:MM:SS

  • YYYY-MM-DD HH:MM:SS.SSS

  • YYYY-MM-DDTHH:MM (в качестве разделителя между датой и временем применяется разделитель - символ T в соответствии со стандартом ISO-8601)

  • YYYY-MM-DDTHH:MM:SS

  • YYYY-MM-DDTHH:MM:SS.SSS

  • HH:MM

  • HH:MM:SS

  • HH:MM:SS.SSS

  • now (представляет текущую дату и время), например

    SELECT datetime('now');
  • DDDDDDDDDD (представляет количество дней с начала юлианской эпохи в виде значения INTEGER или REAL), например

    SELECT datetime(1092941466);

Передадим в функции для даты и времени значения в некоторых из этих форматах:

SELECT date('2004-04-21') AS date, 				-- YYYY-MM-DD
	time('16:45:21') AS time,					-- HH:MM:SS
	datetime('2004-04-21T16:45') AS datetime,	--  YYYY-MM-DDTHH:MM 
	julianday('2004-04-21 16:45:21') AS julian;	-- YYYY-MM-DD HH:MM:SS
Функции для работы с датами и временем в SQLite

Модификаторы

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

  • NNN days: задает смещение на несколько дней. Например, получение даты, которая была 7 дней до определенной:

    SELECT date('2021-12-31', '-7 days');	-- 2021-12-24
  • NNN hours: задает смещение на несколько часов. Например, получение времени, которое будет через три часа:

    SELECT time('19:12', '3 hours');	-- 22:12:00
  • NNN minutes: задает смещение на несколько минут.

    SELECT time('19:12', '35 minutes');	-- 19:47:00
  • NNN.NNNN seconds: задает смещение на секунд.

    SELECT time('19:12', '-45.1 seconds');	-- 19:11:14
  • NNN months: задает смещение на месяцев.

    SELECT date('2021-12-31', '-7 months');	-- 2021-05-31
  • NNN years: задает смещение на несколько лет.

    SELECT date('2021-12-31', '11 years');	-- 2032-12-31
  • start of month: сдвигает дату на первый день месяца:

    SELECT date('2021-11-26', 'start of month');	-- 2021-11-01
  • start of year: сдвигает дату на первый день года:

    SELECT date('2021-11-26', 'start of year');	-- 2021-01-01
  • start of day: сдвигает время на начало дня:

    SELECT time('16:32', 'start of day');	-- 00:00:00
  • weekday N: сдвигает дату на определенный день текущей недели/ Для воскресения передается число 0, для понедельника - число 1 и так далее:

    SELECT date('2021-12-01', 'weekday 0'),	-- 2021-12-05
    		date('2021-12-01', 'weekday 1'), -- 2021-12-06
    		date('2021-12-01', 'weekday 6'); -- 2021-12-04
    
  • unixepoch возвращает количество секунд, которые прошли с момента начала эпохи UNIX. Работает правильно только с форматом "DDDDDDDDDD"

  • localtime: получает локальное время

  • utc: получает время относительно UTC

    SELECT time('12:33:24', 'localtime'), -- 16:33:24
    		time('16:33:24', 'utc'); -- 12:33:24
    

Можно передавать сразу несколько модификаторов:

SELECT date('now', '-2 days', '1 months'),	-- 2021-12-29
	datetime('2021-12-01 12:33', 'start of day', '5 days'); -- 2021-12-06 00:00:00

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

Функция strftime, которая форматирует дату и время, в качестве первого параметра принимает строку форматирования. Строка форматирования может принимать следующие параметры:

  • %d: день месяца в формате 00

  • %f: секунды в формате SS.SSS

  • %H: час в формате 00-24

  • %j: день года в формате 001-366

  • %J: количество дней с начала юлианской эпохи

  • %m: месяц в формате 01-12

  • %M: минута в формате 00-59

  • %s: количество секунда с 1970-01-01

  • %S: секунды в формате 00-59

  • %w: день недели в формате 0-6, где воскресение имеет номер 0

  • %W: номер недели года в формате 00-53

  • %Y: год в формате 0000-9999

  • %%: экраниурет символ %

Пример форматирования:

SELECT strftime('%d.%m.%Y', '2021-12-01');	-- 01.12.2021
Форматирование дат и времени и функция strftime в SQLite
Помощь сайту
Юмани:
410011174743222
Перевод на карту
Номер карты:
4048415020898850