如何将日期时间格式化为字符串就像django一样

问题描述 投票:0回答:2

我有一个DatetimeField,我在django admin中根据它与now()的比较年份突出显示。

def valid_up_to_column(self):
    now = datetime.datetime.now(datetime.timezone.utc)
    delta = (now - self.valid_up_to).seconds

    if delta > 900:
        colour = '#FF0000'  # red
    else:
        return self.valid_up_to
    return format_html('<span style="background-color: {}">{}</span>', colour, self.valid_up_to)

当使用format_html时,日期时间将呈现为原始2017-01-01 00:00 + 00:00 UTC格式,但对于另一种情况,Django的区域设置将接管并根据区域设置对其进行格式化,例如: 2017年1月1日午夜。

在将日期时间传递给format_html()之前,如何将日期时间格式设置为与Django相同的格式?

我尝试过使用strftime(settings.DATETIME_FORMAT),但这是django DATETIME_FORMAT,与Python的字符串格式不同。

python django datetime
2个回答
0
投票

得到它,有一个util格式函数,只需将它传递给DATETIME_FORMAT设置,所以如果没有设置,L10N格式化将从这里获取它。

from django.utils.dateformat import format

datetime_str = format(self.valid_up_to, settings.DATETIME_FORMAT)

0
投票

可以使用相同的函数格式化日期,日期时间和时间值:

from django.utils.formats import localize

formatted_value = localize(value)

localize()函数的日期时间相关部分:

def localize(value, use_l10n=None):
...
    elif isinstance(value, datetime.datetime):
        return date_format(value, 'DATETIME_FORMAT', use_l10n=use_l10n)
    elif isinstance(value, datetime.date):
        return date_format(value, use_l10n=use_l10n)
    elif isinstance(value, datetime.time):
        return time_format(value, 'TIME_FORMAT', use_l10n=use_l10n)
...
© www.soinside.com 2019 - 2024. All rights reserved.