gpt4 book ai didi

python - 解析日期并检索 Python 中的特异性

转载 作者:太空宇宙 更新时间:2023-11-04 02:19:14 25 4
gpt4 key购买 nike

我正在构建一个系统,让用户输入完整或不完整的日期,然后在数据库中找到与该查询匹配的日期列表。

dateutil 包可以很好地解析字符串本身,但我还需要特殊性,换句话说:

  • “20/3/2018”解析,具体到哪一天
  • “六月”解析(如果今天是 2018-08-20,则解析为 2018-06-20,因为它使用今天的日期),但特定于月份,即我希望任何行在 6 月的数据库中进行匹配
  • 2018解析,具体到年份

一旦我知道了特异性,我就可以轻松计算出上限和下限。如何从日期解析字符串并同时检索特异性?

编辑:示例输入输出对dateutil 的当前行为是用当前数据填充缺失数据。因此,如果今天是 2018 年 8 月 25 日,我预计:

  • 输入 -> 输出
  • "2019-07-26"-> (datetime(2019, 7, 26), "daily")
  • "2019-07"-> (datetime(2019, 7, 25), "monthly")
  • "2019"-> (datetime(2019, 8, 25), "yearly")
  • “六月”-> (datetime(2018, 6, 25), "monthly")

输出的确切格式并不重要,只要清楚具体是什么即可。我还希望能够解析 dateutil 解析的所有输入日期格式,并且我不特别关心日期时间是否存在(因为 dateutil 给了我)。

最佳答案

我不知道在 python 中是否有一些模块可以做到这一点。我找不到。

但在内部 dateutil 解析器首先调用 _parse 来获取基本信息,如日期、月份和年份。然后它调用 _build_naive 来用 datetime.datetime.now() 填充空白。所以我们扩展解析器类来编写我们需要的函数。

from dateutil.parser._parser import parser

class my_parser(parser):
def __init__(self, info=None):
super(my_parser, self).__init__(info)

def specificity(self, timestr, default=None, ignoretz=False, tzinfos=None, **kwargs):
# Do basic parsing, don't integrate current datetime
res, skipped_tokens = super(my_parser, self)._parse(timestr, default, ignoretz, tzinfos, **kwargs)
if(res==None):
print("dateutil parser couldn't parse the string")
return None
# Get the finest resolution
for attr in ("microsecond", "second", "minute", "hour", "day", "month", "year"):
value = getattr(res, attr)
if(value!=None):
return attr
print("Specificity couldn't be determined")
return None

mp = my_parser()
print(mp.specificity("20/3/2018")) # day
print(mp.specificity("june")) # month
print(mp.specificity("2018")) # year
print(mp.specificity("12 june 12AM")) # hour
print(mp.specificity("12 june 12:00AM")) # minute

关于python - 解析日期并检索 Python 中的特异性,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/51997469/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com