time、date、datetime、strftime, julianday 格式
函数格式
time(timestring, modifier, modifier, ...)
date(timestring, modifier, modifier, ...)
datetime(timestring, modifier, modifier, ...)
julianday(timestring, modifier, modifier, ...)
strftime(format, timestring, modifier, modifier, ...)
说明
- timestring 为时间串或者数据表字段,其格式如下:
序号 | 时间字符串 | 实例 |
---|---|---|
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 |
- modifier 为修饰符, 有如下格式:
序号 | 格式 | 备注 |
---|---|---|
1 | NNN days | |
2 | NNN hours | |
3 | NNN minutes | |
4 | NNN.NNNN seconds | |
5 | NNN months | |
6 | NNN years | |
7 | start of month | |
8 | start of year | |
9 | start of day | |
10 | weekday N | |
11 | unixepoch | UNIX 时间戳 |
12 | localtime | |
13 | utc |
- strftime的 format 格式化为如下
序号 | 替换 | 描述 |
---|---|---|
1 | %d | 一月中的第几天,01-31 |
2 | %f | 带小数部分的秒,SS.SSS |
3 | %H | 小时,00-23 |
4 | %j | 一年中的第几天,001-366 |
5 | %J | 儒略日数,DDDD.DDDD |
6 | %m | 月,00-12 |
7 | %M | 分,00-59 |
8 | %s | 从 1970-01-01 算起的秒数 |
9 | %S | 秒,00-59 |
10 | %w | 一周中的第几天,0-6 (0 is Sunday) |
11 | %W | 一年中的第几周,01-53 |
12 | %Y | 年,YYYY |
13 | %% | % symbol |
举例
- 获取当前时间(UTC)
sqlite> select datetime('now');
datetime('now')
2018-04-28 09:06:19
- 获取本地时间
sqlite> select datetime('now', 'utc');
datetime('now', 'utc')
2018-04-28 01:06:20
- 格式化时间
将utc事件转换为距离1970-01-01 00:00:00的描述
sqlite> select strftime('%s', 'now', 'utc');
strftime('%s', 'now', 'utc')
1524877737
将当前时间转换为距离1970-01-01 08:00:00的描述,【时区在起始时间也是相关!】
sqlite> select strftime('%s', 'now', 'localtime');
strftime('%s', 'now', 'localtime')
1524935345
- 格式化时间
datetime()
原始数据:
sqlite> select * from test;
id|s1|s2|s3|s4|s5|s6|s7|status
7|1|||||1900-01-01 08:00:00||0
8|2|||||1900-01-01 08:00:00||0
9|2|||||1900-01-01 08:00:00||1
UTC 时间
sqlite> select datetime(s6, 'utc'), s6 from test;
datetime(s6, 'utc')|s6
1900-01-01 00:00:00|1900-01-01 08:00:00
1900-01-01 00:00:00|1900-01-01 08:00:00
1900-01-01 00:00:00|1900-01-01 08:00:00
Localtime时间
sqlite> select datetime(s6, 'localtime'), s6 from test;
datetime(s6, 'localtime')|s6
1900-01-01 16:00:00|1900-01-01 08:00:00
1900-01-01 16:00:00|1900-01-01 08:00:00
1900-01-01 16:00:00|1900-01-01 08:00:00
strftime()
sqlite> select strftime('%d', s6, 'localtime'), s6 from test limit 1;
strftime('%d', s6, 'localtime')|s6
01|1900-01-01 08:00:00
sqlite> select strftime('%f', s6, 'localtime'), s6 from test limit 1;
strftime('%f', s6, 'localtime')|s6
00.000|1900-01-01 08:00:00
sqlite> select strftime('%H', s6, 'localtime'), s6 from test limit 1;
strftime('%H', s6, 'localtime')|s6
16|1900-01-01 08:00:00
sqlite> select strftime('%j', s6, 'localtime'), s6 from test limit 1;
strftime('%j', s6, 'localtime')|s6
001|1900-01-01 08:00:00
sqlite> select strftime('%J', s6, 'localtime'), s6 from test limit 1;
strftime('%J', s6, 'localtime')|s6
2415021.166666667|1900-01-01 08:00:00
sqlite> select strftime('%m', s6, 'localtime'), s6 from test limit 1;
strftime('%m', s6, 'localtime')|s6
01|1900-01-01 08:00:00
sqlite> select strftime('%M', s6, 'localtime'), s6 from test limit 1;
strftime('%M', s6, 'localtime')|s6
00|1900-01-01 08:00:00
sqlite> select strftime('%S', s6, 'localtime'), s6 from test limit 1;
strftime('%S', s6, 'localtime')|s6
00|1900-01-01 08:00:00
sqlite> select strftime('%w', s6, 'localtime'), s6 from test limit 1;
strftime('%w', s6, 'localtime')|s6
1|1900-01-01 08:00:00
sqlite> select strftime('%W', s6, 'localtime'), s6 from test limit 1;
strftime('%W', s6, 'localtime')|s6
01|1900-01-01 08:00:00
sqlite> select strftime('%Y', s6, 'localtime'), s6 from test limit 1;
strftime('%Y', s6, 'localtime')|s6
1900|1900-01-01 08:00:00
sqlite> select strftime('%%', s6, 'localtime'), s6 from test limit 1;
strftime('%%', s6, 'localtime')|s6
%|1900-01-01 08:00:00
%s 为何如下呢?
sqlite> select strftime('%s', s6, 'localtime'), s6 from test limit 1;
strftime('%s', s6, 'localtime')|s6
-2208931200|1900-01-01 08:00:00
sqlite> select strftime('%s', s6, 'utc'), s6 from test limit 1;
strftime('%s', s6, 'utc')|s6
-2208988800|1900-01-01 08:00:00