中的
parse函数
dateutils.parser能够将许多日期字符串格式解析为
datetime对象。
如果您只是想知道某个特定字符串是否 可以 表示或包含有效日期,则可以尝试使用以下简单函数:
from dateutil.parser import parsedef is_date(string, fuzzy=False): """ Return whether the string can be interpreted as a date. :param string: str, string to check for date :param fuzzy: bool, ignore unknown tokens in string if True """ try: parse(string, fuzzy=fuzzy) return True except ValueError: return False
然后您有:
>>> is_date("1990-12-1")True>>> is_date("2005/3")True>>> is_date("Jan 19, 1990")True>>> is_date("today is 2019-03-27")False>>> is_date("today is 2019-03-27", fuzzy=True)True>>> is_date("Monday at 12:01am")True>>> is_date("xyz_not_a_date")False>>> is_date("yesterday")False自定义解析
parse可能会将某些字符串识别为日期,而您不想将其视为日期。例如:
解析
"12"
并"1999"
返回一个表示当前日期的日和年在字符串中的数字取代的DateTime对象"23, 4"
并将"23 4"
解析为datetime.datetime(2023, 4, 16, 0, 0)
。"Friday"
将返回未来最近的星期五的日期。- 同样
"August"
对应于当前日期,月份更改为8月。
此外,
parse它也不支持区域设置,因此无法识别英语以外的其他语言的星期或星期几。
通过使用自定义
parserinfo类,可以在一定程度上解决这两个问题,该类定义了如何识别月份和日期名称:
from dateutil.parser import parserinfoclass CustomParserInfo(parserinfo): # three months in Spanish for illustration MonTHS = [("Enero", "Enero"), ("Feb", "Febrero"), ("Marzo", "Marzo")]然后可以将此类的实例与一起使用
parse:
>>> parse("Enero 1990")# ValueError: Unknown string format>>> parse("Enero 1990", parserinfo=CustomParserInfo())datetime.datetime(1990, 1, 27, 0, 0)


