python日期字符串解析

用python + 正则表达式 实现的日期字符串解析工具:

# -*- coding: utf-8 -*-
#
# 关注易生活,我是小E
# 微信:EasyTool
#
import re
from datetime import date

DATE_PATTERNS = {
u'2013-05-16':u'^(\d{4})[\-\/\.年](\d{1,2})[\-\/\.月](\d{1,2})日{,1}',
u'20130516':u'^(\d{4})(\d{1,2})(\d{1,2})',
u'2013-05':u'^(\d{4})[\-\/\.年](\d{1,2})[\-\/\.月]{,1}()',
u'2013':u'^(\d{4})[\-\/\.年]{,1}()()',
u'05月':u'^()(\d{1,2})[月]()',
u'05-16':u'^()(\d{1,2})[\-\/\.月](\d{1,2})日{,1}'
}

DATE_PATTERNS_TEST = [
u'2013-05-16',
u'2013年05月16',
u'2013年05月16日',

u'20130516',

u'2013-05', 
u'2013年05', 
u'2013-05月',

u'2013',
u'2013年',

u'05月',

u'05-16',
u'05月16',
u'05月16日',

u'05'
]

LANG_PRINT = 'utf-8'

def parse_date(dt_str):
    year, month, day = u'', u'', u''

    for pat_key in DATE_PATTERNS.keys():
        dt_arrs = re.findall(DATE_PATTERNS[pat_key], dt_str)
        if len(dt_arrs)>0:
            dt_arr = dt_arrs[0]
            if len(dt_arr)>0: year  = dt_arr[0]
            if len(dt_arr)>1: month = dt_arr[1]
            if len(dt_arr)>2: day   = dt_arr[2]
            break

    return year, month, day

def test_all():
    for dt_str in DATE_PATTERNS_TEST:
        dt_tuple = parse_date(dt_str)
        if dt_tuple is not None:
            print u'dt_str {0} parse result: {1} {2} {3}'.format(dt_str, dt_tuple[0], dt_tuple[1], dt_tuple[2]).encode(LANG_PRINT)
        else:
            print u'error date format {0}'.format(dt_str).encode(LANG_PRINT)

if __name__ == '__main__':
    test_all()

期间遇到问题:

print 内容需要是utf-8格式,否则会异常

print是标准输出sys.stdout

查看标准输出的编码: print sys.stdout.encoding

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

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值