【发布时间】:2012-03-08 16:44:12
【问题描述】:
我有一个如下查询:
today = datetime.datetime.now()
month = today.month
print month
它输出:
3
我想显示月份名称,例如“March”。我该怎么办?
【问题讨论】:
-
以下答案都不适合我,因为它们没有考虑请求的语言环境...
我有一个如下查询:
today = datetime.datetime.now()
month = today.month
print month
它输出:
3
我想显示月份名称,例如“March”。我该怎么办?
【问题讨论】:
我通过注册一个自定义模板标签来帮助我将它应用到任何需要月份名称的模板页面上解决了同样的问题。
模板标签/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 }}
【讨论】:
【讨论】:
timezone.now().strftime('%B')
仅限英文,可以使用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'
【讨论】:
Calendar API 是另一种选择。
calendar.month_name[3] # would return 'March'
【讨论】:
Month Name 到 Month Number 和 python 中的反之亦然
通过使用日历calendar
创建reverse dictionary 是一种合理的方法:
dict((val,k) for k,v in enumerate(calendar.month_abbr))
【讨论】:
Python 的日历模块会为您完成这项工作,请参阅 calendar.month_name
month = calendar.month_name[3]
【讨论】:
datetime.datetime.strftime(today, '%B') # Outputs 'March'
或
datetime.datetime.strftime(today, '%b') # Outputs 'Mar'
http://docs.python.org/library/datetime.html#strftime-strptime-behavior
【讨论】:
使用 strftime:
>>> today = datetime.datetime.now()
>>> today.strftime("%B")
'March'
>>>
【讨论】: