【问题标题】:Parse a date and retrieve specificity in Python在 Python 中解析日期并检索特异性
【发布时间】:2018-08-24 04:24:39
【问题描述】:

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

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

  • “20/3/2018”解析,并且特定于当天
  • “June”解析(如果今天是 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 解析的所有输入日期格式,我并不特别关心 datetime 是否存在(因为 dateutil 给了我)。

【问题讨论】:

  • 您研究过 Maya 吗? github.com/kennethreitz/maya
  • 您的数据是如何存储在数据库中的?特别是日期?你能提供一个你正在寻找的例子吗?比如,用户的输入,dateutil 的预期返回值,以及你如何使用它来查询数据库?
  • @ThePoetCoder 我查看了文档,但找不到任何对我有帮助的东西。你能指点我正确的功能吗?
  • @NimeshkaSrimal 我有一些基本的,因为我不在乎 是什么格式,因为我可以围绕它编写处理代码。也就是说,我在上面举了一些例子。
  • @robertlayton,我的回答对你有用吗?

标签: python datetime


【解决方案1】:

我不知道在 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

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 2018-07-26
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2021-01-22
    • 2023-04-05
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多