時間日期函數
SQLite 支援下列五種時間日期函數。日期時間的範圍為 0000-01-01 00:00:00 至 9999-12-31 23:59:59 (julidan day numbers 1721059.5 ~ 5373484.5)。
strftime(format, timestring, modifier, modifier, ...)
返回值格式則根據 format 所設定。
date(timestring, modifier, modifier, ...)
返回值格式為 YYYY-MM-DD。
相等於 strftime('%Y-%m-%d', ...)。
time(timestring, modifier, modifier, ...)
返回值格式為 HH:MM:SS。
相等於 strftime('%H:%M:%S', ...)
datetime(timestring, modifier, modifier, ...)
返回值格式為 YYYY-MM-DD HH:MM:SS。
相等於 strftime('%Y-%m-%d %H:%M:%S', ...)
julianday(timestring, modifier, modifier, ...)
返回值為 Julian day,也就是計算從格林威治時間西元前 4714 年 11 月 24 日到 timestring 的日子。
相等於 strftime('%J', ...)
format
strftime 函數中第一個參數 format 字串所支援的輸出格式如下所示。標準 C 函數庫 strftime 函數的輸出格式,strftime 函數支援大多數常用的,並且新增二種新的格式 %f 及 %J。
%d(00) 一個月的第幾天。
%f(SS.SSS) 精準至小數點第三位的秒。
%H(00-24) 小時。
%j(001-366) 一年的第幾天。
%J 儒略日(Julian day)是指由公元前4713年1月1日,世界標準時間中午12時開始所經過的天數,多為天文學家採用,用以作為天文學的單一曆法,把不同曆法的年表統一起來。
%m(01-12) 一年的第幾月。
%M(00-59) 分鐘。
%s 自西元 1970-01-01 開始的秒數。
%S(00-59) 秒。
%w(0-6) 一週的第幾天,星期日為0。
%W(00-53) 一年的第幾週。
%Y(0000-9999) 年份。
%% 傳回 % 符號。
timestring
timestring 需符合下列的格式。
now 傳回目前的日期與時間,使用 sqlite3_vfs 的 xCurrentTime 函數。傳回的時區是 UTC+0,而非台灣的 UTC+08,要注意加上 'localtime' modifier。
DDDDDDDDDD Julian day。
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
7~9 中的字母 T 是用來分隔日期與時間的符號,ISO-8601 規定的。
10~12 的日期固定為 2000-01-01。
modifier
timestring 的日期時間可以透過 modifier 來變更。日期時間變更的順序是由左而右,所以 modifier 的位置很更重要。
±NNN hours 增加 ±NNN 小時。
±NNN minutes 增加 ±NNN 分鐘。
±NNN.NNNN seconds 增加 ±NNN 秒。
±NNN days 增加 ±NNN 天數。
±NNN months 增加 ±NNN 月,增加之後會重新計算日期,以避免不存在的日期。比如 2001-03-31 modifier '+1 month' 得到 2001-04-31,但 4 月沒有 31 日,所以會變成 2001-05-01。
±NNN years 增加 ±NNN 年。當 ????-02-29 增加 ±NNN 年時,日期會被重新計算,以避免不存在的日期。
start of month 將日期時間移到 timestring 的年初,也就是 ????-01-01T00:00:00。
start of year 將日期時間移到 timestring 的月初,也就是 ????-??-01T00:00:00。
start of day 將日期時間移到 timestring 的日初,也就是 ????-??-??T00:00:00。
weekday N 將日期移至下一個星期 N(0-6, 星期日為 0),相同星期N則不改變,也就是只能改變 6 日而已。
unixepoch 只適用於 timestring=DDDDDDDDDD。把 DDDDDDDDDD 為 Julian day 改變成 Unix Time,也就是自 1970 年 1 月 1 日 00:00:00 以來的秒數。unixepoch 必須是第一個 modifier,藉此來改變 timestring 的性質。
localtime 此修飾詞會先假設 timestring 的時區為 UTC+0,再調整時間為本地時間。
utc 此修飾詞會先假設 timestring 的時區為本地時區,再調整時間為 UTC+0 時區。