在 Django 中格式化 DateTimeField

Sta*_*ute 10 python django django-models

DateTimeField当使用auto_now_add这种方式在 Django 中保存时间戳时:

creation_timestamp = models.DateTimeField(auto_now_add=True)
Run Code Online (Sandbox Code Playgroud)

该字段以毫秒为单位保存:

2018-11-20T15:58:44.767594-06:00
Run Code Online (Sandbox Code Playgroud)

我想将其格式化为无毫秒显示:

2018-11-20T15:58:44-06:00
Run Code Online (Sandbox Code Playgroud)

但我能想到的唯一选择并不能完全显示我所需要的:

format="%Y.%m.%dT%H:%M:%S%z"给我2018.11.20T15:58:44-0600 如何按照我需要的方式格式化该字段?

或者,我宁愿DateTimeField完全不保存任何毫秒,但auto_now_add允许做这种事情吗?

小智 9

如果你想在显示时格式化它,你可以使用:creation_timestamp.strftime("%Y-%m-%d%H:%M:%S")

您还可以将DateTimeField其保存为该格式,但这将要求进行一组将应用于系统范围的更改:

在您的设置文件中设置以下内容:

  1. DATETIME_FORMAT="%Y-%m-%d%H:%M:%S"
  2. L10N=False在日期格式方面,制作痛苦的本地化数据并不具有先例。
  3. USE_TZ=False

但是,请考虑以下事实:默认情况下,此更改将应用​​于项目中的所有日期时间对象。


rud*_*dra 6

您可以重写DateTimeFieldvalue_to_string方法并在其中添加更改。例如:

class CustomDateTimeField(models.DateTimeField):
    def value_to_string(self, obj):
        val = self.value_from_object(obj)
        if val:
            val.replace(microsecond=0)
            return val.isoformat()
        return ''
Run Code Online (Sandbox Code Playgroud)

并在模型中使用它:

 created = CustomDateTimeField(auto_now_add=True)
Run Code Online (Sandbox Code Playgroud)