• Python与SQLite日期时间函数的使法


    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

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

  • 相关阅读:
    第一部分 Linux的规划与安装
    第二部分 Linux 文件、目录与磁盘格式
    for in 遍历对象
    时间
    javaScript模块化
    Hbuilder将移动app或者web项目打包
    echarts的通用属性的介绍
    echart的x轴或y轴区间标签如何从大到小排列
    数组的sort()排序
    解决vscode下载很慢的问题
  • 原文地址:https://www.cnblogs.com/mmix2009/p/3225828.html
Copyright © 2020-2023  润新知