字符串日期解析函数

import re
import datetime


datetime_example = [
    '2021',
    '2021年',

    '2021-02',
    '2021-2',
    '2021/02',
    '2021年02月',

    '2021-05-01',
    '2021/05/01',
    '2021年05月01日',

    '2021年05月01日 09时',
    '2021年05月01日 09',

    '2021年05月01日 09时21分',
    '2021年05月01日 09:21',

    '2021年05月01日 09时21分01秒',
    '2021年05月01日 09:21:01',

    '2021-05-01 09时21分01秒',
    '2021-05-01 09:21:01'
]


def parse_datetime(string):
    """
    字符串中解析时间
    :param string: 格式化时间,日期分隔符支持-,/,日期中文(年,月,日)。
    :return: 时间类型/None
    """
    if not isinstance(string, str):
        raise TypeError('string must be str')

    datetime_pattern = re.compile(
        '(?P<year>\d{4})[年/\-]?(?P<month>\d{1,2})?[月/\-]?(?P<day>\d{1,2})?日? ?(?P<hour>\d{1,2})?[时:]?(?P<minute>\d{1,2})?[分:]?(?P<second>\d{1,2})?秒?'
    )
    d = re.search(datetime_pattern, string)
    if d:
        match_dict = d.groupdict()
    else:
        return None

    datetime_dict = {}
    for k in match_dict:
        if match_dict[k]:
            datetime_dict[k] = int(match_dict[k])

    for date_str in ['month','day']:
        if date_str not in datetime_dict:
            datetime_dict[date_str] = 1

    return datetime.datetime(**datetime_dict)


if __name__ == '__main__':
    for i in datetime_example:
        print(parse_datetime(i))
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值