SQLite - 日期與時間



SQLite 支援以下五種日期和時間函式:

序號 函式 示例
1 date(timestring, modifiers...) 返回此格式的日期:YYYY-MM-DD
2 time(timestring, modifiers...) 返回 HH:MM:SS 格式的時間
3 datetime(timestring, modifiers...) 返回 YYYY-MM-DD HH:MM:SS 格式的日期和時間
4 julianday(timestring, modifiers...) 返回自公元前 4714 年 11 月 24 日格林尼治中午以來的天數。
5 strftime(timestring, modifiers...) 根據作為第一個引數指定的格式字串返回格式化的日期,格式如下所示。

以上五個日期和時間函式都接受時間字串作為引數。時間字串後面可以跟零個或多個修飾符。strftime() 函式也將其第一個引數作為格式字串。下一節將詳細介紹不同型別的時間字串和修飾符。

時間字串

時間字串可以採用以下任何格式:

序號 時間字串 示例
1 YYYY-MM-DD 2010-12-30
2 YYYY-MM-DD HH:MM 2010-12-30 12:10
3 YYYY-MM-DD HH:MM:SS.SSS 2010-12-30 12:10:04.100
4 MM-DD-YYYY HH:MM 30-12-2010 12:10
5 HH:MM 12:10
6 YYYY-MM-DDTHH:MM 2010-12-30 12:10
7 HH:MM:SS 12:10:01
8 YYYYMMDD HHMMSS 20101230 121001
9 now 2013-05-07

您可以使用“T”作為分隔日期和時間的文字字元。

修飾符

時間字串後面可以跟零個或多個修飾符,這些修飾符將更改上述五個函式中的任何一個返回的日期和/或時間。修飾符從左到右應用。

SQLite 中提供以下修飾符:

  • NNN 天
  • NNN 小時
  • NNN 分鐘
  • NNN.NNNN 秒
  • NNN 個月
  • NNN 年
  • 月初
  • 年初
  • 當日開始
  • 星期 N
  • unixepoch
  • localtime
  • utc

格式化程式

SQLite 提供了一個非常方便的函式strftime() 來格式化任何日期和時間。您可以使用以下替換來格式化日期和時間。

替換 描述
%d 月份中的日期,01-31
%f 小數秒,SS.SSS
%H 小時,00-23
%j 一年中的日期,001-366
%J 儒略日數,DDDD.DDDD
%m 月份,00-12
%M 分鐘,00-59
%s 自 1970-01-01 以來的秒數
%S 秒,00-59
%w 星期幾,0-6(0 為星期日)
%W 一年中的星期,01-53
%Y 年份,YYYY
%% % 符號

示例

現在讓我們使用 SQLite 提示符嘗試各種示例。以下命令計算當前日期。

sqlite> SELECT date('now');
2013-05-07

以下命令計算當前月份的最後一天。

sqlite> SELECT date('now','start of month','+1 month','-1 day');
2013-05-31

以下命令計算給定 UNIX 時間戳 1092941466 的日期和時間。

sqlite> SELECT datetime(1092941466, 'unixepoch');
2004-08-19 18:51:06

以下命令計算給定 UNIX 時間戳 1092941466 的日期和時間,並補償您的本地時區。

sqlite> SELECT datetime(1092941466, 'unixepoch', 'localtime');
2004-08-19 13:51:06

以下命令計算當前 UNIX 時間戳。

sqlite> SELECT strftime('%s','now');
1393348134

以下命令計算自美國獨立宣言簽署以來的天數。

sqlite> SELECT julianday('now') - julianday('1776-07-04');
86798.7094695023

以下命令計算自 2004 年特定時刻以來的秒數。

sqlite> SELECT strftime('%s','now') - strftime('%s','2004-01-01 02:34:56');
295001572

以下命令計算當年 10 月份第一個星期二的日期。

sqlite> SELECT date('now','start of year','+9 months','weekday 2');
2013-10-01

以下命令計算自 UNIX 紀元以來的秒數(類似於 strftime('%s','now'),但包括小數部分)。

sqlite> SELECT (julianday('now') - 2440587.5)*86400.0;
1367926077.12598

在格式化日期時在 UTC 和本地時間值之間進行轉換,請使用 utc 或 localtime 修飾符,如下所示:

sqlite> SELECT time('12:00', 'localtime');
05:00:00
sqlite> SELECT time('12:00', 'utc');
19:00:00
廣告

© . All rights reserved.