Python实现特定格式字符串日期的合法性检测

一、问题及需求

        最近拿到一些库表数据,需要对数据质量进行分析,发现库表中存储日期的字段都是字符型的,数据中年份表示形式为‘2022’、年月表示形式为‘202201’、年月日表示形式为‘20220106’,增加了数据质量分析的任务,需要对这些字符型日期进行合法性检测,还需要考虑日期合理性(比如不应大于当前时间),这就需要对年份、年月、年月日都进行检测。时间紧任务重,情急之下就这样简单写了个方法。

二、Python代码实现

"""
此方法目前仅支持年月日之间没有任何格式符的字符串日期的校验
字符串日期格式如下:年 2022,年月 202201,年月日 20220106
"""
from dateutil.parser import parse
def is_date(string, fuzzy=False):
    if string is None or len(string) == 0 or string.isspace():
        return False
    if not(string.isnumeric()):
        return False
    if len(string) < 4:
        return False
    if len(string) > 8:
        return False
    if len(string) % 2 != 0:
        return False
    if len(string) == 6:
        vstr = string[0:4]+'-'+string[4:]
    else:
        vstr = string
    try:
        parse(vstr, fuzzy=fuzzy)
        return True
    except:
        return False

三、未解决问题

        当字符串日期为年月(如:‘202201’)形式时,年份与月份之间不加‘-’字符,传入parse会报错,临时采用组串方式解决,后续再去学习研究!大老们如看到此帖烦请指导!感谢!

parse('202201')
ParserError: month must be in 1..12: 202201

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值