在Python中解析日期并检索特定性
我正在构建一个系统,让用户输入完整或不完整的日期,然后在数据库中查找与该查询匹配的日期列表在Python中解析日期并检索特定性,python,datetime,Python,Datetime,我正在构建一个系统,让用户输入完整或不完整的日期,然后在数据库中查找与该查询匹配的日期列表 dateutil包可以解析字符串本身,但我还需要特殊性,换句话说: “2018年3月20日”解析为特定日期 “June”解析为(如果今天是2018-08-20,则解析为2018-06-20,因为它使用今天的日期),但特定于月份,即我希望数据库中6月份的任何行都匹配 2018年解析,并且特定于该年 一旦我知道了特异性,我就可以很容易地计算出上限和下限。如何解析日期中的字符串并同时检索特定性 编辑:示例输
dateutil
包可以解析字符串本身,但我还需要特殊性,换句话说:
- “2018年3月20日”解析为特定日期
- “June”解析为(如果今天是2018-08-20,则解析为2018-06-20,因为它使用今天的日期),但特定于月份,即我希望数据库中6月份的任何行都匹配
- 2018年解析,并且特定于该年
- 输入->输出
- “2019-07-26”->
(日期时间(2019,7,26),“每日”)
- “2019-07”->
(日期时间(2019,7,25),“每月”)
- “2019”->
(日期时间(2019年8月25日),“每年”)
- “六月”->
(日期时间(2018年6月25日),“每月”)
输出的确切格式并不重要,只要清楚具体是什么。我还希望能够解析dateutil解析的所有输入日期格式,我并不特别关心datetime是否存在(因为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
你调查过玛雅吗?您的数据是如何存储在数据库中的?特别是日期?你能举个例子说明你在找什么吗?比如,用户的输入,dateutil的预期返回值,以及您如何使用它来查询数据库?@ThePoetCoder我查看了文档,没有找到任何对我有用的东西。你能给我指出正确的函数吗?@NimeshkaSrimal我有一些基本的函数,因为我不在乎它的格式是什么,因为我可以围绕它编写处理代码。也就是说,我在上面举了一些例子。@robertlayton,我的回答对你有用吗?