在django中转换日期和时间格式

时间:2013-05-08 16:32:59

标签: django django-models django-views

如何将格式mm/dd/yyyy的日期字段转换为格式dd/mm/yyyy和格式24hrs to 12hr AM/PM.的时间字段

这是我在以下情况下使用

在模型的数据库中我得到值,所以如果从db获得的值为'0',则日期和时间格式应为(dd/mm/yyyy and 12hr AM/PM).

如果数据库字段中的值为“1”,则格式为(mm/dd/yyyy and 24hr)

models.py

class Report(models.Model):
    user = models.ForeignKey(User, null=False)
    manual_date = models.DateField('Another date', null=True, blank=True)
    manual_time = models.TimeField('Another time', null=True, blank=True)

class Settings(models.Model):
    date_format = models.CharField('Date format', max_length=100)
time_format = models.CharField('Time format', max_length=100)

怎么做。

由于

1 个答案:

答案 0 :(得分:2)

我认为您最好使用标记date在模板级别处理此转换。例如,我看到您将datetime变量传递给模板。只需将它们转换为未转换的,然后在模板中的任何位置执行此操作:

{% if condition %}
    {{date|date:"DATE_FORMAT"}}
    {{value|time:"TIME_FORMAT"}}
{% endif %}

其中"TIME_FORMAT"是您希望显示日期的实际格式,条件是需要满足的条件。

如果你绝对需要在view方法中执行此操作,那么你可以像这样使用模块django.utils.dateformat

from django.utils.dateformat import DateFormat, TimeFormat
formatted_date = DateFormat(date_variable)
formatted_date.format('Y-m-d') # substitute this format for whatever you need
formatted_time = TimeFormat(time_variable)
formatted_date.format('h') # substitute this format for whatever you need

使用该类可以将date_variabletime_variable格式化为适当的格式字符串。

另外,关于您的观看代码。您不能像以下那样在视图方法的中间返回一个字符串:

if request.method == 'POST':
    if user.date_format == '0':
        date=datetime.datetime.strptime('%m/%d/%Y').strftime('%d/%m/%Y')
        return date

如果请求方法为POST,则会抛出异常。此外,你在哪个日期格式化?您需要格式化report.manual_date。我在代码中的任何地方都没有看到。根据您的设置,将我上面所述的内容应用于您要格式化的变量,并在返回时将该变量传递给tempalte_context。 我希望它有所帮助!