【问题标题】:(Django) how to get month name?(Django)如何获得月份名称?
【发布时间】:2012-03-08 16:44:12
【问题描述】:

我有一个如下查询:

today = datetime.datetime.now()
month = today.month
print month

它输出:

3

我想显示月份名称,例如“March”。我该怎么办?

【问题讨论】:

  • 以下答案都不适合我,因为它们没有考虑请求的语言环境...

标签: python django datetime


【解决方案1】:

我通过注册一个自定义模板标签来帮助我将它应用到任何需要月份名称的模板页面上解决了同样的问题。

模板标签/etras.py

from django import template
import calendar

register = template.Library()

@register.filter
def month_name(value):
    return calendar.month_name[value]

在模板中的使用:

{% load extras %}
{{ month_figure|month_name }}

【讨论】:

    【解决方案2】:

    使用日期时间字符串格式化方法,例如

    >>> today.strftime('%B')
    'March'
    

    有关详细信息和格式代码的完整列表,请参阅the python datetime docs

    【讨论】:

    • 使用时区的人也可以使用:timezone.now().strftime('%B')
    【解决方案3】:

    仅限英文,可以使用Python的日期时间字符串格式化方法,例如

    >>> today.strftime('%B')
    'March'
    

    您也可以使用 Django 方法,该方法将返回当前激活语言的名称。

    在 Django 模板中你也可以使用:

    {{ a_date|date:'F' }}
    

    在 Django 视图函数中:

    from django.template.defaultfilters import date
    date(a_date, 'F')
    

    您可以在 Django shell (python manage.py shell) 中测试后者,例如西班牙语:

    In [1]: from django.utils.translation import get_language, activate
    
    In [2]: activate('es')
    
    In [3]: get_language()
    Out[3]: 'es'
    
    In [4]: import datetime
    
    In [5]: today = datetime.date.today()
    
    In [6]: from django.template.defaultfilters import date
    
    In [7]: date(today, 'F')
    Out[7]: u'Septiembre'
    

    【讨论】:

      【解决方案4】:

      Calendar API 是另一种选择。

      calendar.month_name[3] # would return 'March'
      

      【讨论】:

      • 如何本地化这个字符串?
      【解决方案5】:

      Month NameMonth Numberpython 中的反之亦然

      通过使用日历calendar

      创建reverse dictionary 是一种合理的方法:

      dict((val,k) for k,v in enumerate(calendar.month_abbr))

      【讨论】:

        【解决方案6】:

        Python 的日历模块会为您完成这项工作,请参阅 calendar.month_name

        month = calendar.month_name[3]
        

        【讨论】:

          【解决方案7】:
          datetime.datetime.strftime(today, '%B') # Outputs 'March'
          

          datetime.datetime.strftime(today, '%b') # Outputs 'Mar'
          

          http://docs.python.org/library/datetime.html#strftime-strptime-behavior

          【讨论】:

            【解决方案8】:

            使用 strftime:

            >>> today = datetime.datetime.now()
            >>> today.strftime("%B")
            'March'
            >>> 
            

            【讨论】:

              猜你喜欢
              • 2011-03-02
              • 1970-01-01
              • 1970-01-01
              • 1970-01-01
              • 1970-01-01
              • 1970-01-01
              • 1970-01-01
              • 2021-06-30
              • 2011-03-12
              相关资源
              最近更新 更多