Datetime

数据库中要有一列来记录查询的时间:

  • 查城市时,如果是5分钟之内的检索,则直接调用数据库中已有的结果
  • 调出历史记录使用

要解决的问题

  1. API返回的事Str,要转成日期/时间格式
  2. 两个日期/时间之间的间隔怎么衡量

字符串转date object

d = '2017-02-17T00:05:00+08:00' # thinkpage returned last_update result

dt = datetime.strptime(d, "%Y-%m-%dT%M:%S+%M:%S")

报错redefinition of group name 'M' as group 6; was group 4 at position 133

查到了一个解决dateutil库,可以直接对字符串转化成date object

from dateutil import parser
d = parse(d)

在我的Jupyter中可以用;但是在python3中却无法安装;不是太想在这个里面花太多时间,还是想用自带的strptime方法解决问题。

参考了@Tern同学的代码,发现自己翻了个愚蠢的错误,误将小时:分钟解析成分钟:秒;另外只需要前16位即可,不需要后面的

dt = datetime.strptime(d[0:16], "%Y-%m-%dT%H:%M")

意识到一个问题,心知返回的时间是last_update,而不是当时搜索的时间,所以比较应该用的是搜索时的系统时间

使用datetime.now()并以datetime格式存进sqlite,查询时返回的是字符串'2017-02-19 23:08:14.326447'

d2 = '2017-02-19 23:08:14.326447'
dt2 = datetime.strptime(d2, "%Y-%m-%d %H:%M:%S.%f")

时间间隔计算

datetime Doc

from datetime import timedelta
interval = timedelta(minutes=5)
current_time = datetime.now()

用目前的时间和数据库中记录的时间差和interval做比较,如果<=interval直击返回数据库中的结果

运行中报错

module 'datetime' has no attribute 'now' change to import datetime import datetime

问题 作业中偷懒只解析了前16位,但后面的其实是有价值的信息(时区);需要把这块补充上。

Change Log

2017.02.19 Initial draft

results matching ""

    No results matching ""