Python之判断字符串是否日期?是日期则输出统一格式

liftword2周前 (05-30)技术文章7

需求:

最近遇到一个朋友问了一个小需求,怎么判断一个字符串是不是日期。

这个问题看起来很简单,实际上稍加分析会发现里面有很多的坑,真要做出一个功能非常完善的判断函数来并不简单的事情。

需求分析:

首先:判断字符串是不是日期格式,最佳最简便的方法是用time模块里面的strptime尝试将字符串转成格式化时间对象,如果转换成功那么肯定是日期格式,如果转换失败那么肯定不是日期格式。

其次:日期格式有多种多样,必须考虑到各种可能性并将其列入模板加以匹配,多次尝试strptime,这样才能避免错漏。

第三:如果要判断的字符串中如果含有中文数字,要对其处理,将中文数字转成英文数字。

代码:

def isdate(datestr):
    from time import strptime
    from time import strftime
    chinesenum = {'一': '1', '二': '2', '三': '3', '四': '4',
                  '五': '5', '六': '6', '七': '7', '八': '8', '九': '9', '零': '0', '十': '10'}
    strdate = ''
    for i in range(len(datestr)):
        temp = datestr[i]
        if temp in chinesenum:
            if temp == '十':
                if datestr[i+1] not in chinesenum:
                    strdate += chinesenum[temp]
                elif datestr[i-1] in chinesenum:
                    continue
                else:
                    strdate += '1'
            else:
                strdate += chinesenum[temp]
        else:
            strdate += temp

    pattern = ('%Y年%m月%d日', '%Y-%m-%d', '%y年%m月%d日', '%y-%m-%d')
    output = '%Y年%m月%d日'
    for i in pattern:
        try:
            ret = strptime(strdate, i)
            if ret:
                return strftime(output, ret)
        except:
            continue
    return False


datelist = ['2020年11月23日', '2020-11-23',
            '二零二零年十一月二十三日', '二零年十一月二三日', '20年1月5日', '20年01月05日']

for i in datelist:
    print(isdate(i))

out:
2020年11月23日
2020年11月23日
2020年11月23日
2020年11月23日
2020年01月05日
2020年01月05日

代码讲解:

代码中比较麻烦的是中文数字转英文,尤其麻烦的是中文数字’十’,当它单独存在时要转成’10’,当它前面没数字后面有数字要转成’1’,当它前面、后面都有数字时要忽视它不转。

另外若遇到日期二十日写成廿日的,请自行在代码里面添加处理逻辑,这种情况比较少见,暂不加入循环避免影响运行效率。

partern里面我加了4种常见的字符串日期写法,如果你遇到要处理的日期字符串有别的写法要添加到这里面。

output里面也是同理,可以根据自己的需求修改日期输出的格式。

具体日期模板怎么改可以看看我以前写的关于“python之time模块详细梳理”的文章。

相关文章

Python字符串是否有包含子字符串的方法

技术背景在Python编程中,经常会遇到判断一个字符串是否包含另一个子字符串的需求。Python提供了多种方法来实现这一功能,不同方法在使用场景和性能上有所差异。实现步骤使用 in操作符in 操作符是...

Python中检查给定的字符串是否包含数字

本文介绍Python中如何检查字符串是否包含数字。如果给定的字符串中包含数字True,否则返回False。Python中检查字符串是否包含数字的一种简单方法是使用isdigit()方法验证字符串中的每...

Python中,什么是字符串?

在Python中,字符串(str)是由一系列字符组成的数据类型,用来表示文本。例如,"Hello, World!" 就是一个字符串。你可以用单引号(')或双引号(")来...

python 入门到脱坑 基本数据类型—字符串string

以下是Python字符串(String)的入门详解,包含基础操作、常用方法和实用技巧,适合初学者快速掌握:一、字符串基础1. 定义字符串# 单引号/双引号 s1 = 'hello' s...

Python中如何查找字符串及快速掌握一些运用

有的时候,我们需要查找一些内容,输入要查找的文字,能够快速反馈出来。1 我们先看看in关键字的使用s = "hello world" if "world" in s:...

如何检查字符串是否代表一个数字(浮点数或整数)

技术背景在Python编程中,经常需要判断一个字符串是否能表示为数字(整数或浮点数)。这在数据处理、输入验证等场景中非常常见。Python提供了多种方法来实现这一功能,不同的方法适用于不同的场景,各有...