SQLite时间函数&日期时间、字符串、时间戳互相转换

冷不防 2023-10-17 21:15 271阅读 0赞

‘now’为当前日期时间

**转字符串、时间
  1. SELECT date('now'); -->结果:2018-05-05
  2. SELECT time('now'); -->结果:06:55:38
  3. SELECT datetime('now'); -->结果:2018-05-05 06:55:38
  4. SELECT strftime('%Y-%m-%d %H:%M:%S', 'now'); -->结果:2018-05-05 06:55:38
**转时间戳
  1. select strftime('%s','now'); -->结果:1525502284
  2. select strftime('%s','2018-05-05'); -->结果:1525478400
时间戳转时间、字符串
  1. select datetime(1525502284, 'unixepoch', 'localtime'); -->结果:2018-05-05 14:38:04
  2. --对参数不理解可参考文末“修饰符”


扩展:SQLite的五个时间函数:

  1. date(timestring, modifier, modifier, …)**:以 YYYY-MM-DD 格式返回日期
  2. time(timestring, modifier, modifier, …)**:以 HH:MM:SS 格式返回时间
  3. datetime(timestring, modifier, modifier, …)**:以 YYYY-MM-DD HH:MM:SS 格式返回日期时间
  4. julianday(format, timestring, modifier, modifier, ..):返回从格林尼治时间的公元前 4714 年 11 月 24 日正午算起的天数
  5. strftime(format, timestring, modifier, modifier, ..):根据第一个参数指定的格式字符串返回格式化的日期
讲道理其他四个函数都可以用 strftime() 函数来表示:

date(…) –> strftime(‘%Y-%m-%d’,…)
time(…) –> strftime(‘%H:%M:%S’,…)
datetime(…) –> strftime(‘%Y-%m-%d %H:%M:%S’,…)
julianday(…) –> strftime(‘%J’,…)

来看看各参数的取值格式(文末举例):

日期时间字符串(timestring):




























































序号 日期时间字符串 实例
1 YYYY-MM-DD 2018-05-05
2 YYYY-MM-DD HH:MM 2018-05-05 12:10
3 YYYY-MM-DD HH:MM:SS.SSS 2018-05-05 15:39:20.100
4 MM-DD-YYYY HH:MM 05-05-2018 12:10
5 HH:MM 同理
6 YYYY-MM-DDTHH:MM 同理
7 HH:MM:SS 同理
8 YYYYMMDD HHMMSS 同理
9 now 2018-05-05 15:39:20
10 DDDDDDDDDD 1525478400(时间戳)
strftime() 函数,格式化串(format):





























































符号 描述
%d 一月中的第几天 01-31
%f 小数形式的秒,SS.SSSS
%H 小时 00-24
%j 一年中的第几天 01-366
%J Julian Day Numbers
%m 月份 01-12
%M 分钟 00-59
%s 从 1970-01-01日开始计算的秒数
%S 秒 00-59
%w 星期,0-6,0是星期天
%W 一年中的第几周 00-53
%Y 年份 0000-9999
%% % 百分号
修饰符(modifier):











































































序号 符号 作用
[+-]NNN years 增加/减去指定数值的年
[+-]NNN months 增加/减去指定数值的月
[+-]NNN days 增加/减去指定数值的天
[+-]NNN hours 增加/减去指定数值的小时
[+-]NNN minutes 增加/减去指定数值的分钟
[+-]NNN.NNNN seconds 增加/减去指定数值的秒
7 start of year 当前日期的开始年
8 start of month 当前日期的开始月
9 start of day 当前日期的开始日
11 weekday N 表示返回下一个星期是N的日期和时间
12 unixepoch 用于将日期解释为UNIX时间(即:自1970-01-01以来的秒数,也就是时间戳)
13 localtime 表示返回本地时间
14 utc 表示返回UTC(世界统一时间)时间

重点:修饰符运用实例

  1. SELECT datetime('now'); -->结果:2018-05-05 08:10:26(和本机时间可能不一致,时区问题请看使用‘localtime’修饰符后的变化)
  2. SELECT datetime('now','1 years');-->结果:2019-05-05 08:10:26
  3. SELECT datetime('now','1 months');-->结果:2018-06-05 08:10:26
  4. SELECT datetime('now','1 days');-->结果:2018-05-06 08:10:26
  5. SELECT datetime('now','1 hours');-->结果:2018-05-05 09:10:26
  6. SELECT datetime('now','1 minutes');-->结果:2018-05-05 08:11:26
  7. SELECT datetime('now','1 seconds');-->结果:2018-05-05 08:10:27
  8. SELECT datetime('now','start of year');-->结果:2018-01-01 00:00:00
  9. SELECT datetime('now','start of month');-->结果:2018-05-01 00:00:00
  10. SELECT datetime('now','start of day');-->结果:2018-05-05 00:00:00
  11. SELECT datetime('now','weekday 0');-->结果:2018-05-06 08:10:26
  12. (解释:2018-05-05是周六,“weekday 0”表示返回下周的周日(系统默认以周日为一周的开始0),明天06号是周日,所以,返回了2018-05-06
  13. SELECT datetime('1525478400','unixepoch');-->结果:2018-05-05 00:00:00unixepoch一般用于解释时间戳)
  14. SELECT datetime('now','localtime');-->结果:2018-05-05 16:10:26(你会发现这个时间比没使用‘localtime’参数的时间多了8个小时,因为中国是东八时区)
  15. SELECT datetime('now','utc');-->结果:2018-05-05 00:10:26(时区问题)

水平有限,小文如有错漏,请各路大神多指点。

发表评论

表情:
评论列表 (有 0 条评论,271人围观)

还没有评论,来说两句吧...

相关阅读