Начиная с версии 2.8.7 в SQLite имеются встроенные функции для работы с временем и датами.
Функции
- date ( timestring, modifier, modifier, ...)
Возвращает дату в формате YYYY-MM-DD
- time ( timestring, modifier, modifier, ...)
Возвращает время в формате HH:MM:SS
- datetime ( timestring, modifier, modifier, ...)
Возвращает дату и время в формате YYYY-MM-DD HH:MM:SS
- julianday ( timestring, modifier, modifier, ...)
Возвращает день по юлианскому исчислению, который представляет из себя число с плавающей точкой. Отсчет ведется от 4714 года до н.э.
- strftime ( format, timestring, modifier, modifier, ...)
возвращает строку с временем и датой в заданном формате
- current_time
Возвращает текущее время в формате HH:MM:SS
- current_date
Возвращает текущую дату в формате YYYY-MM-DD
- current_timestamp
Возвращает текущую время и дату в формате YYYY-MM-DD HH:MM:SS
Функциям можно передавать неогранченное число модификаторов. Они позволяют выполнить любые арифметические действия над датой перед возвращением зачения.
Форматы дат
Вышеупомянутые функции могут работать со следующими форматами даты и времени:
- 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
- YYYY-MM-DDTHH:MM:SS
- YYYY-MM-DDTHH:MM:SS.SSS
- HH:MM
- HH:MM:SS
- HH:MM:SS.SSS
- now
- DDDD.DDDD (день по юлианскому исчислению)
Если функции передать некорректный формат даты, то она вернет null (Сама СУБД SQLite при этом ошибку не вернет).
Модификаторы
В функциях для работы с датой/временем для проведения арифметических операций над датами можно использовать следующие мификаторы:
- NNN days
- NNN hours
- NNN minutes
- NNN.NNNN seconds
- NNN months
- NNN years
- start of month
- start of year
- start of week
- start of day
- weekday N
- unixepoch
- localtime
- utc
- julian
- gregorian
Все модификаторы, передающиеся в функцию, должны быть в кавычках.
select datetime('now','localtime','+3.5 seconds','+10 minutes');
select datetime('now','localtime','+3.5 seconds','weekday 2');
Форматирование
Для представления даты/времени в виде форматированной строки следует использовать функцию strftime со следующими метапоследовательностями:
- %d — день месяца
- %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("%m-%d-%Y %H:%M:%S %s %w %W",'now','localtime');