Python與SQLite日期時間函式的使用

2021-06-23 00:40:15 字數 3747 閱讀 4256

sqlite的時間函式跟python的時間函式有些許差別,所以稍做記錄,供自己以後查詢。

網上有將sqlite官方wiki內容翻譯成中文的文章,大家有興趣可以搜尋一下,我這裡單純記錄一下個人比較常用的一些內容。

sqlite的五個時間函式:

date(日期時間字串, 修正符, 修正符, ......)

time(日期時間字串, 修正符, 修正符, ......)

datetime(日期時間字串, 修正符, 修正符, ......)

julianday(日期時間字串, 修正符, 修正符, ......)

strftime(日期時間格式, 日期時間字串, 修正符, 修正符, ......)

date() 返回乙個以"yyyy-mm-dd"為格式的日期;

time() 返回乙個以"yyyy-mm-dd hh:mm:ss"為格式的日期時間;

datetime() 返回乙個日期時間格式的物件;

julianday() 返回乙個天數,從格林威治時間西元前2023年11月24號開始算起;

strftime() 返回乙個經過格式化的日期時間。

例子一:計算當前時間

值得注意的是最好加上'localtime',只有乙個'now'返回的是格林尼治時間。不然像我在東八區的話,時間會相差八小時。這裡曾經讓我誤認為虛擬機器的時間不同步。

1 sqlite>

select

datetime('

now');2

2013-01

-0705:21:07

34 sqlite>

select

datetime('

now','

localtime');

52013-01

-0713:21:09

例子二:計算當前月份最後一天

可以在修正符裡面進行 年月日 的加減,但是 星期 不支援,返回的是空。

1 sqlite>

select date('

now','

start of month

','+1 month

','-1 day');

22013-01

-3134 sqlite>

select date('

now','

start of month

','+1 month

','-1 day

','+1 year');

52014-01

-3167 sqlite>

select date('

now','

start of month

','+1 month

','-1 day

','+1 week

');

例子三:計算兩個日期相差的天數

當然羅,要是計算相差的小時,分鐘或者秒,分別乘上12,60,60就能達到效果了。比如後面計算的是兩個日期相差的小時。

1 sqlite>

select julianday('

now') - julianday('

2012-12-22');

216.2240774538368

34 sqlite>

select (julianday('

now') - julianday('

2012-12-22

')) *12;

5194.796493470669

例子四:使用strftime對字串進行日期格式化

注意要保證輸入的字串跟日期時間格式一致。

1 sqlite>

select strftime('

%y-%m-%d

','2013-01-10');

22013-01

-1034 sqlite>

select strftime('

%y-%m-%d

','2013-1-1');

56 sqlite>

select strftime('

%y-%m-%d

','2013,1,1

');

在python中使用從sqlite獲取的datetime物件

關於python的日期時間函式,大家可以搜尋相關的文章,或者直接檢視python的說明文件。這裡只簡單提一下python的datetime物件都支援什麼操作。

datetime2

=datetime1

+timedelta

datetime2

=datetime1

-timedelta

timedelta

=datetime1

-datetime2

datetime1

<

datetime2

在datetime物件上進行加減,但是注意必須是 timedelta 物件。

最後,日常使用中可能會從sqlite中獲取 datetime 型別的資料,但是從sqlite中得到資料在python將會是乙個str物件。

所以,必須使用datetime模組的strptime轉換一下:

1 conn =sqlite3.connect(db)

2 c =conn.cursor()

3 rows = c.execute("

select distinct(datetime(julianday(ins_time))) from items order by ins_time desc limit 0,1")

4for row in

rows:

5 result = datetime.strptime(row[0], "

%y-%m-%d %h:%m:%s

")

參考:

strftime() 可以使用以下的符號對日期和時間進行格式化:

%d 乙個月中的第幾 0-31

%f 小數形式的秒 ss.ssss

%h 小時 00-24

%j 一年中的第幾天 01-366

%j julian day number

%m 月份 01-12

%m 分鐘 00-59

%s 從1970-01-01日開始計算的秒數

%s 秒 00-59

%w 星期 0-6,0代表星期天

%w 一年中的第幾周 00-53

%y 年份 0000-9999

%%% 百分號

結合上面的格式化符號,可以使用strftime()來表示另外幾個函式:

date(...)  -->  strftime("%y-%m-%d", ...)

time(...)  -->  strftime("%h:%m:%s", ...)

datetime(...)  -->  strftime("%y-%m-%d %h:%m:%s", ...)

julianday(...)  -->  strftime("%j", ...)

將時間初始化的幾個修正符:

start of year

start of month

start of week

start of day

以上幾個修正符會分別將年、月、星期、日初始化。

sqlite 日期格式與排序問題

1 sqlite沒有日期格式,一般做為字串處理 如果需要日期計算,使用日期時間函式 日期時間欄位為字串,必須保證儲存欄位時,其格式為 yyyy mm dd hh mm ss 比如這種 2019 12 30 12 10 04 2 日期時間函式 date timestring,modifier,modi...

SQLite 日期 時間

sqlite 支援以下五個日期和時間函式 序號函式例項1 date timestring,modifiers.以 yyyy mm dd 格式返回日期。2time timestring,modifiers.以 hh mm ss 格式返回時間。3datetime timestring,modifiers...

SQLite 日期 時間

具體看 不過例項介紹的不夠詳細,以下詳細舉例 例2.select datetime 2006 10 17 結果 2006 10 17 12 00 00 例3.select datetime 2006 10 17 00 20 00 1 hour 12 minute 結果 2006 10 17 01 0...