SQLite datatime()函数为何获取不到系统本地时间?

前言

最近项目中频繁用到SQLite的时间日期这些函数,发现一个很奇怪的问题:就是当使用datetime()函数获取日期时间时,得到的日期时间和你系统的本地时间是不一致的。


有图有真相


系统时间是2018-02-11 04:07:xx(pm) ,但是通过datetime() 获得的日期时间却是2018-02-11 08:07:03。


如何获得系统的日期时间

为什么会出现这种情况?难道是SQLite的bug?最后知道原来SQLite默认取的是UTC(协调世界时(Coordinated Universal  Time))。

那么,怎么取得系统当前的时间呢?其实很简单,原来datetime()有多个重载版本,只要给datetime()函数传递两个参数告诉SQLite我们要的不是UTC时间而是当前系统的时间即可,第一个参数是CURRENT_TIMESTAMP(当前时间戳),第二个参数是字符串'localtime'。

上图:


这样取到的时间就和当前系统时间是一致的了。

使用datetime('now','localtime')同样可以取得当前系统时间,效果同上。

上图:



第三种方法可以通过strftime('%Y-%m-%d %H:%M:%f','now','localtime')指定日期时间的格式来获得当前的系统时间。

如图:



第四中方法:使用strftime('%Y-%m-%d %H:%M:%f',datetime(),'localtime')可以达到同样的效果。

如图:



第五种方法:strftime('%Y-%m-%d %H:%M:%f',CURRENT_TIMESTAMP,'localtime')。

如图:



第三、四、五种方法中的第一个参数格式不是固定的,你可以指定自己需要的格式作为参数来调用strftime()函数。举个例子,我不想秒后面还显示小数点,我可以指定format为:'%Y-%m-%d %H:%M:%S';

如图:


  • 1
    点赞
  • 6
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值