【问题标题】:Django string to date formatDjango 字符串到日期格式
【发布时间】:2014-05-20 00:44:52
【问题描述】:

我想将我的字符串日期转换为 django 日期格式。我尝试了一种方法。但没有工作。

date = datetime.datetime.strptime(request.POST.get('date'),"Y-mm-dd").date()

我收到了这个错误。

time data '2014-04-07' does not match format 'Y-mm-dd'

我的代码有什么问题。

【问题讨论】:

    标签: python django datetime


    【解决方案1】:

    应该是%Y-%m-%d:

    >>> s = "2014-04-07"
    >>> datetime.datetime.strptime(s, "%Y-%m-%d").date()
    datetime.date(2014, 4, 7)
    

    根据documentation

    • %Y 代表年份,世纪为十进制数
    • %m - 以零填充十进制数表示的月份
    • %d - 以零填充十进制数表示的月份中的日期

    希望对您有所帮助。

    【讨论】:

    • 我有一个带时区的字符串日期,转换时出现错误:ValueError: unconverted data remains: T18:30:00.000Z 如何转换此字符串日期:2019-10-15T18:30:00.000Z?
    • @saran3h 你可以使用 django.utils.dateparse.parse_datetime 。在这里查看梅尔文的答案:stackoverflow.com/questions/8636760/…
    【解决方案2】:

    在这种情况下使用 django 的 dateparse 可能会很方便。

    from django.utils.dateparse import parse_date
    date_str = request.POST.get('date')
    date = parse_date(date_str)
    

    【讨论】:

    • parse_date 无法正常工作,如果日期不是%Y-%m-%d 格式,则返回None
    • 正如其他 cmets 中提到的,parse_datetime 为我工作。
    【解决方案3】:

    如果给定日期不是%Y-%m-%d格式,django.utils.dateparse.parse_date函数将返回None

    我没有在 django 源代码中找到一个函数来解析 DATE_INPUT_FORMATS 的字符串。所以我为此编写了一个自定义帮助函数 我已经添加到这里以帮助其他人。

    from datetime import datetime
    from django.utils.formats import get_format
    
    def parse_date(date_str):
        """Parse date from string by DATE_INPUT_FORMATS of current language"""
        for item in get_format('DATE_INPUT_FORMATS'):
            try:
                return datetime.strptime(date_str, item).date()
            except (ValueError, TypeError):
                continue
    
        return None
    

    【讨论】:

    • 太棒了!如果有几种不同的格式,答案是极好的!
    • 某些字符串可能被多种格式错误地接受。 2021 年 4 月 7 日还是 2021 年 7 月 4 日?
    • @PedroLacerda 是的,如果您的 DATE_INPUT_FORMATS 包含这两种格式,它就会出错。我认为你不应该同时使用这两种格式。
    【解决方案4】:

    在这种情况下使用 Django 的 dateparse 的 parse_datetime 可能会很方便。如果是动态的,则不必显式应用数据时间格式。

    from django.utils.dateparse import parse_datetime
    date = parse_datetime(datetime_str)
    

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 2022-01-13
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多