Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/python/336.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181

Warning: file_get_contents(/data/phpspider/zhask/data//catemap/8/linq/3.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
在Python中解析日期并检索特定性_Python_Datetime - Fatal编程技术网

在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年解析,并且特定于该年
一旦我知道了特异性,我就可以很容易地计算出上限和下限。如何解析日期中的字符串并同时检索特定性

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

  • 输入->输出
  • “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,我的回答对你有用吗?