【问题标题】:Django localized date parsingDjango本地化日期解析
【发布时间】:2015-09-01 11:48:28
【问题描述】:

我有一个完全国际化的 django 应用程序,我们使用的日期字段也应该采用相应语言的格式。现在我遇到了一个问题,我必须根据当前语言解析不同的日期格式。

我试过了:

from django.utils import formats, translation
format_code = formats.get_format("SHORT_DATE_FORMAT", lang=translation.get_language())

它返回当前使用的日期格式(例如德国的“d.m.Y”),但我需要可以使用 datetime.strptime 解析的日期格式(例如“%d.%m.%Y”)。我怎样才能得到这个?

【问题讨论】:

    标签: python django localization internationalization


    【解决方案1】:

    目前,我发现最好的方法是:

    from datetime import datetime
    from django.utils import formats
    
    def parse_locale_date(formatted_date):
        parsed_date = None
        for date_format in formats.get_format('DATE_INPUT_FORMATS'):
            try:
                parsed_date = datetime.strptime(formatted_date, date_format)
            except ValueError:
                continue
            else:
                break
        if not parsed_date:
            raise ValueError
        return parsed_date.date()
    

    【讨论】:

      【解决方案2】:

      从文档中查看:

      {% load i18n %}
      
      {% get_current_language as LANGUAGE_CODE %}
      <!-- Current language: {{ LANGUAGE_CODE }} -->
      <p>{% trans "your date here" %}</p>
      
      {% language 'en' %}
          {% get_current_language as LANGUAGE_CODE %}
          <!-- Current language: {{ LANGUAGE_CODE }} -->
          <p>{% trans "your date format here" %}</p>
      {% endlanguage %}
      

      在此处查看文档:Switching language in templates

      【讨论】:

      • 抱歉,我不明白这如何解决我的问题。我不会翻译我的日期格式。我搜索一个选项来让当前的日期格式与 datetime.strftime 一起使用。
      【解决方案3】:

      您可以使用formats.date_format(value, format) 代替datetime.strptime,例如:

      from django.utils import formats, translation
      format_code = formats.get_format("SHORT_DATE_FORMAT", lang=translation.get_language())
      formats.date_format(your_date, format_code)
      

      【讨论】:

        猜你喜欢
        • 1970-01-01
        • 2020-02-05
        • 1970-01-01
        • 2021-06-29
        • 2012-07-10
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        相关资源
        最近更新 更多