SQLite的时间函数跟Python的时间函数有些许差别,所以稍做记录,供自己以后查询。

网上有将SQLite官方WIKI内容翻译成中文的文章,大家有兴趣可以搜索一下,我这里单纯记录一下个人比较常用的一些内容。

SQLite的五个时间函数:

date(日期时间字符串, 修正符, 修正符, ......)
time(日期时间字符串, 修正符, 修正符, ......)
datetime(日期时间字符串, 修正符, 修正符, ......)
julianday(日期时间字符串, 修正符, 修正符, ......)
strftime(日期时间格式, 日期时间字符串, 修正符, 修正符, ......)

date() 返回一个以"YYYY-MM-DD"为格式的日期;
time() 返回一个以"YYYY-MM-DD HH:MM:SS"为格式的日期时间;
datetime() 返回一个日期时间格式的对象;
julianday() 返回一个天数,从格林威治时间公元前4714年11月24号开始算起;
strftime() 返回一个经过格式化的日期时间。

例子一:计算当前时间
值得注意的是最好加上'localtime',只有一个'now'返回的是格林尼治时间。不然像我在东八区的话,时间会相差八小时。这里曾经让我误认为虚拟机的时间不同步。

1 sqlite> select datetime('now');
2 2013-01-07 05:21:07
3
4 sqlite> select datetime('now','localtime');
5 2013-01-07 13:21:09

例子二:计算当前月份最后一天
可以在修正符里面进行 年月日 的加减,但是 星期 不支持,返回的是空。

1 sqlite> select date('now','start of month','+1 month','-1 day');
2 2013-01-31
3
4 sqlite> select date('now','start of month','+1 month','-1 day','+1 year');
5 2014-01-31
6
7 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');
2 16.2240774538368
3
4 sqlite> select (julianday('now') - julianday('2012-12-22')) * 12;
5 194.796493470669

例子四:使用strftime对字符串进行日期格式化
注意要保证输入的字符串跟日期时间格式一致。

1 sqlite> select strftime('%Y-%m-%d','2013-01-10');
2 2013-01-10
3
4 sqlite> select strftime('%Y-%m-%d','2013-1-1');
5
6 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")
4 for 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

以上几个修正符会分别将年、月、星期、日初始化

Python与SQLite日期时间函数的使法的更多相关文章

  1. SQLite日期时间函数

    SQLite日期时间函数 SQLite支持以下五个日期时间函数: date(timestring, modifier, modifier, …) time(timestring, modifier, ...

  2. SQLite 日期 & 时间

    具体看http://www.runoob.com/sqlite/sqlite-date-time.html 不过实例介绍的不够详细,以下详细举例: SQLite包含了如下时间/日期函数:datetim ...

  3. Python日期时间函数处理

    所有日期.时间的 api 都在datetime模块内. 1 日期的格式化输出 datetime => string import datetime now = datetime.datetime ...

  4. ORACLE 常用函数 日期/时间函数

    ---------------------------------------------日期/时间函数----------------------------------------------- ...

  5. Mysql学习笔记(五)数学与日期时间函数

    学习内容: 1.数学函数 2.日期时间函数 这些函数都是很常用的函数...在这里进行简单的介绍... 数学函数: mysql); //取绝对值函数 这个函数可安全地使用于 BIGINT 值. mysq ...

  6. PHP中日期时间函数date()用法总结

    date()是我们常用的一个日期时间函数,下面我来总结一下关于date()函数的各种形式的用法,有需要学习的朋友可参考. 格式化日期date() 函数的第一个参数规定了如何格式化日期/时间.它使用字母 ...

  7. [转载]ORACLE日期时间函数大全

    ORACLE日期时间函数大全 TO_DATE格式(以时间:2007-11-02   13:45:25为例)           Year:              yy two digits 两位年 ...

  8. DB2 日期时间函数

    db2日期时间函数 (DATE(TRIM(CHAR(DT#11Y))||'-'||TRIM(CHAR(DT#11M))||'-'||TRIM(CHAR(DT#11D))) BETWEEN DATE(' ...

  9. mysql与oracle的日期/时间函数小结

    前言 本文的日期/时间全部格式化为”2016-01-01 01:01:01“形式: MONITOR_TIME为数据库表字段: 字符串与日期/时间相互转换函数 Oracle 日期/时间转字符串函数:to ...

随机推荐

  1. dbms_output.put与put_line

    BEGIN DBMS_OUTPUT.ENABLE (buffer_size => NULL);--with no limit on the output. dbms_output.put('a' ...

  2. sql获取当前时间

    sql读取系统日期和时间的方法如下:--获取当前日期(如:yyyymmdd) select CONVERT (nvarchar(12),GETDATE(),112) --获取当前日期(如:yyyymm ...

  3. [技巧篇]00.TrimFilter去掉jsp页面空白,提升访问速度

    最近感觉项目访问的速度有点慢,我就在网络中一顿搜索,发下了一个好东东,忍不住跟大家分享,希望大家可以试一试,确实有提升的空间啊!要求去除空白区.提取公用代码.减小页面. 胖先生乱搜之下,找到了Trim ...

  4. Java设计模式の单例模式

    -------------------------------------------------- 目录 1.定义 2.常见的集中单例实现 a.饿汉式,线程安全 但效率比较低 b.单例模式的实现:饱 ...

  5. 计数排序Counting sort

    注意与基数排序区分,这是两个不同的排序 计数排序的过程类似小学选班干部的过程,如某某人10票,作者9票,那某某人是班长,作者是副班长 大体分两部分,第一部分是拉选票和投票,第二部分是根据你的票数入桶 ...

  6. mysql 服务端事务和客户端事务对比分析

    之前做mysql事务测试的时候都是在mysql服务端存储过程里面包含事务. 例如: CREATE DEFINER=`root`@`localhost` PROCEDURE `Test`(out deb ...

  7. Bzoj4873 [SXOI2017]寿司餐厅

    Time Limit: 20 Sec  Memory Limit: 512 MBSubmit: 64  Solved: 45 Description Kiana最近喜欢到一家非常美味的寿司餐厅用餐.每 ...

  8. bzoj 2276: [Poi2011]Temperature——单调队列

    Description 某国进行了连续n天的温度测量,测量存在误差,测量结果是第i天温度在[l_i,r_i]范围内. 求最长的连续的一段,满足该段内可能温度不降 第一行n 下面n行,每行l_i,r_i ...

  9. webpack自动生成项目的html

    1 自动生成多个html页面 设置webpack.config.js中的plugins属性,多次调用plugin插件(new htmlWebpackPlugin()),同时设置对应数量的.js入口文件 ...

  10. js_面向对象设计和行为委托设计模式

    最近换了新工作,面试过程中有多多少少的问题没有给的出答案,为自己的技术短板而促急. javascript中万物皆对象(键:值构成的一种数据),暂且不讨论这个句话的对与错,可以想象对象在javascri ...