【问题标题】:Parse multiple date formats to a specific format将多种日期格式解析为特定格式
【发布时间】:2013-09-03 10:36:32
【问题描述】:

在我的应用程序中,用户可以输入带有日期分隔符变体的 dd/mm/yy 格式的日期(比如他们可以使用 /,- 或空格作为分隔符)。他们还可以输入 4 位数的年份或 2 位数的年份,还可以输入 3 个字母的月份代码或 2 位数的月份代码。一旦我从用户那里得到日期,我想验证该格式是有效的日期格式,然后将其转换为“%d-%b-%Y”。在下面的函数中,我正在验证日期格式,但我不确定如何处理所有混合日期分隔符格式,如 01/12 2013、01-12 13、01 12/2013 等。可能有很多这些

def validate_date(date_str):
    formats = ['%d-%b-%Y', '%d-%b-%y', '%d-%m-%Y', '%d-%m-%y',
               '%d/%m/%Y', '%d/%m/%y', '%d/%b/%Y', '%d/%b/%y',
               '%d %m %Y', '%d %m %y', '%d %b %Y', '%d %b %y',
                '%d%m%Y', '%d%b%y', '%d%b%Y', '%d %b/%Y'] 
    data = None

    for fmt in formats:
        try:
            dateValue = datetime.datetime.strptime(date_str, fmt).date()
            data = dateValue
            break
        except ValueError:
            pass

    if data is None:
    # invalid date format

【问题讨论】:

  • 与其重新发明轮子,也许你想看看python-dateutils;它的 parse() 函数已经处理了这些格式,等等。
  • 我认为您不应该允许它们,因为它们不代表任何语言环境中的有效文件格式。如果您查看 Martijn 提出的 lib,您会看到变化以 d/m/y 的顺序旋转,而不是混合分隔符。您也可以通过强制单独输入日、月和年来解决此问题(不完美),或提供日历小部件
  • 感谢您的回复。我确实向客户(应用程序的所有者)建议我们最好使用日历小部件,但他们仍然希望允许用户输入带有混合分隔符的日期

标签: python date date-formatting date-parsing


【解决方案1】:

您可以将所有不是数字的字符替换为空格,然后使用更少的格式对其进行解析。

【讨论】:

    猜你喜欢
    • 2020-07-04
    • 2013-01-09
    • 1970-01-01
    • 2019-11-10
    • 2020-09-14
    • 1970-01-01
    • 2018-03-07
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多