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

6

我有一个DatetimeField,在django管理界面中,根据它与现在时间的差值来进行高亮显示。

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的区域设置接管并根据语言环境进行格式化,例如Jan 1 2017, midnight。
如何在将其传递给format_html()之前将日期时间格式化为与Django相同的格式?
我尝试使用strftime(settings.DATETIME_FORMAT),但这是django DATETIME_FORMAT,不同于Python的字符串格式化。
2个回答

5

明白了,这里有一个实用的格式化函数,只需传递 DATETIME_FORMAT 设置即可,如果没有设置,L10N 格式化将自动接管。

from django.utils.dateformat import format

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

2
同样的函数可以用来格式化日期、日期时间和时间值:
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)
...

这个完美地起作用了,谢谢你指引我找到了正确的工具! - Esteban

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接