12306抢票脚本开发(六)更友好的时间输入方式


文章地址 :

12306抢票脚本开发(一)提纲
12306抢票脚本开发(二)解析火车站代号并分析查询的HTTP请求
12306抢票脚本开发(三)实现一个简单的查询脚本
12306抢票脚本开发(四)完善上节课的代码并面向对象
12306抢票脚本开发(五)更友好的使用方式
12306抢票脚本开发(六)更友好的时间输入方式
12306抢票脚本开发(七)将前几节课的成果结合起来实现一个完整的工具


简介 :

火车票购票的时候需要我们输入火车发车的时间 , 这个时间是要精确到天的
在我们之前的分析中 , 查询的接口使用的时间格式为 : "年-月-日" (当月和日为一位数的时候补零)这样的格式
为了能让程序的输入更友好 , 我们应该考虑我们常见的时间表示都有什么 ?

1. 相对日期表示法 : 
    1.1 自然语言 : 今天/明天/后天/下个月的15日/下个月的第一个星期五...
    1.2 时间戳 : 1487892686 (精确到秒或者毫秒)
2. 绝对日期表示法
    2.1 格式一 : 2017年1月1日 / 2017年01月01日
    2.2 格式二 : 2017年1月1号 / 2017年01月01号
    2.3 格式三 : 17年1月1日 / 17年01月01号
    2.4 格式四 : 2017/01/01
    2.5 格式五 : 一月一日 / 1月1日
    2.6 格式六 : 15日

对于 相对日期表示法 中的自然语言表示法的前几个 (例如 : 今天/明天/后天) 我们可以通过基于规则的匹配来获取到用户想要表达的真实日期
对于 相对日期表示法 中的自然语言表示法的后几个 (例如 : 下个月的15日/下个月的第一个星期五) 可能需要解析固定的语法格式 , 然后进行一定的计算才能得出真正的日期 (这个感觉比较复杂 , 需要解析的规则也比较多 , 因此先不考虑)
对于 时间戳 这里因为它太精确了 , 我们并不要求这样高的精度 , 而且在正常的使用中 , 应该也不会有用户直接输入一个时间戳来表示自己乘坐火车的时间
对于 绝对日期 这种格式 : 我们根据观察可以发现 , 存在如下规律 :

1. 每一种格式中都包含年月日这三个元素
2. 这三个元素之后的字符是分隔符 , 这个分隔符有两种情况 : 
  2.1 都相同 , 例如 2017/01/01
  2.2 固定的格式 : 年 月 日 / 年 月 号
3. 有的时候 , 用户可能会省略 年份 或者 年份和月份 , 但是 日期 并不会少 , 这种情况就表示出发日期为 当前月份 或者 是今年

我们只需要能找到这些分隔符 , 然后用分隔符把这个表示日期的字符串分割开来再解析成为我需要的格式即可
接下来就来看看我们最终的代码 :


代码 :

#!/usr/bin/env python
# encoding:utf-8

import datetime
import re

def timeConvertor(content):
    # 首先判断用户是不是按规定格式输入的
    if re.match(r"\d{4}-\d{2}-\d{2}", content):
        return content
    elif content == "明天":
        now = datetime.datetime.now()
        delta = datetime.timedelta(days=1)
        n_days = now + delta
        return n_days.strftime("%Y-%m-%d")
    elif content == "后天":
        now = datetime.datetime.now()
        delta = datetime.timedelta(days=2)
        n_days = now + delta
        return n_days.strftime("%Y-%m-%d")
    elif content.endswith("天后"):
        content = content.replace("天后", "")
        days = int(content)
        now = datetime.datetime.now()
        delta = datetime.timedelta(days=days)
        n_days = now + delta
        return n_days.strftime("%Y-%m-%d")
    else: # 所有其他没有的规则都默认查询今天
        now = datetime.datetime.now()
        return  now.strftime("%Y-%m-%d")  

def test():
    print timeConvertor("今天")
    print timeConvertor("明天")
    print timeConvertor("后天")
    print timeConvertor("1天后")
    print timeConvertor("5天后")
    print timeConvertor("10天后")

总结 :

由于时间的关系 , 本节课最终实现的代码很简陋 , 而且之前分析的一些功能并没有实现 , 但是考虑到用户的输入格式错误的可能性较小 , 为了提高开发效率 , 尽快能推出一款产品 , 因此这里只是简单地对用户输入的时间进行了格式化 , 完整的格式化代码会在整个系统开发完成后再进行改进


运行效果 :

Paste_Image.png

参考资料 :

[ Python 日期和时间 ]


预告 :

下节课我们会结合之前所有课程的经验 , 将之前课程的所有代码整合起来 , 实现一个可以正常使用的查票引擎
用户可以使用命令行参数来输入 :

1. 出发时间 (根据这节课的脚本实现)
2. 出发地
3. 目的地

然后程序就会自动去请求 12306 的数据接口 , 得到数据后再格式化显示出来

最后编辑于
©著作权归作者所有,转载或内容合作请联系作者
  • 序言:七十年代末,一起剥皮案震惊了整个滨河市,随后出现的几起案子,更是在滨河造成了极大的恐慌,老刑警刘岩,带你破解...
    沈念sama阅读 194,242评论 5 459
  • 序言:滨河连续发生了三起死亡事件,死亡现场离奇诡异,居然都是意外死亡,警方通过查阅死者的电脑和手机,发现死者居然都...
    沈念sama阅读 81,769评论 2 371
  • 文/潘晓璐 我一进店门,熙熙楼的掌柜王于贵愁眉苦脸地迎上来,“玉大人,你说我怎么就摊上这事。” “怎么了?”我有些...
    开封第一讲书人阅读 141,484评论 0 319
  • 文/不坏的土叔 我叫张陵,是天一观的道长。 经常有香客问我,道长,这世上最难降的妖魔是什么? 我笑而不...
    开封第一讲书人阅读 52,133评论 1 263
  • 正文 为了忘掉前任,我火速办了婚礼,结果婚礼上,老公的妹妹穿的比我还像新娘。我一直安慰自己,他们只是感情好,可当我...
    茶点故事阅读 61,007评论 4 355
  • 文/花漫 我一把揭开白布。 她就那样静静地躺着,像睡着了一般。 火红的嫁衣衬着肌肤如雪。 梳的纹丝不乱的头发上,一...
    开封第一讲书人阅读 46,080评论 1 272
  • 那天,我揣着相机与录音,去河边找鬼。 笑死,一个胖子当着我的面吹牛,可吹牛的内容都是我干的。 我是一名探鬼主播,决...
    沈念sama阅读 36,496评论 3 381
  • 文/苍兰香墨 我猛地睁开眼,长吁一口气:“原来是场噩梦啊……” “哼!你这毒妇竟也来了?” 一声冷哼从身侧响起,我...
    开封第一讲书人阅读 35,190评论 0 253
  • 序言:老挝万荣一对情侣失踪,失踪者是张志新(化名)和其女友刘颖,没想到半个月后,有当地人在树林里发现了一具尸体,经...
    沈念sama阅读 39,464评论 1 290
  • 正文 独居荒郊野岭守林人离奇死亡,尸身上长有42处带血的脓包…… 初始之章·张勋 以下内容为张勋视角 年9月15日...
    茶点故事阅读 34,549评论 2 309
  • 正文 我和宋清朗相恋三年,在试婚纱的时候发现自己被绿了。 大学时的朋友给我发了我未婚夫和他白月光在一起吃饭的照片。...
    茶点故事阅读 36,330评论 1 326
  • 序言:一个原本活蹦乱跳的男人离奇死亡,死状恐怖,灵堂内的尸体忽然破棺而出,到底是诈尸还是另有隐情,我是刑警宁泽,带...
    沈念sama阅读 32,205评论 3 312
  • 正文 年R本政府宣布,位于F岛的核电站,受9级特大地震影响,放射性物质发生泄漏。R本人自食恶果不足惜,却给世界环境...
    茶点故事阅读 37,567评论 3 298
  • 文/蒙蒙 一、第九天 我趴在偏房一处隐蔽的房顶上张望。 院中可真热闹,春花似锦、人声如沸。这庄子的主人今日做“春日...
    开封第一讲书人阅读 28,889评论 0 17
  • 文/苍兰香墨 我抬头看了看天上的太阳。三九已至,却和暖如春,着一层夹袄步出监牢的瞬间,已是汗流浃背。 一阵脚步声响...
    开封第一讲书人阅读 30,160评论 1 250
  • 我被黑心中介骗来泰国打工, 没想到刚下飞机就差点儿被人妖公主榨干…… 1. 我叫王不留,地道东北人。 一个月前我还...
    沈念sama阅读 41,475评论 2 341
  • 正文 我出身青楼,却偏偏与公主长得像,于是被迫代替她去往敌国和亲。 传闻我的和亲对象是个残疾皇子,可洞房花烛夜当晚...
    茶点故事阅读 40,650评论 2 335

推荐阅读更多精彩内容