在 Django 中格式化 DateTimeField

新手上路,请多包涵

在 Django 的 DateTimeField 中保存时间戳时使用 auto_now_add 这样:

 creation_timestamp = models.DateTimeField(auto_now_add=True)

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

 2018-11-20T15:58:44.767594-06:00

我想将其格式化为在没有毫秒的情况下显示:

 2018-11-20T15:58:44-06:00

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

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

或者我宁愿保存 DateTimeField 完全没有毫秒但是 auto_now_add 允许做这种事情吗?

原文由 Stan Redoute 发布,翻译遵循 CC BY-SA 4.0 许可协议

阅读 1.8k
2 个回答

您可以覆盖 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 ''

并在模型中使用它:

  created = CustomDateTimeField(auto_now_add=True)

原文由 ruddra 发布,翻译遵循 CC BY-SA 4.0 许可协议

如果要在显示时格式化,可以使用: 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

但是,请考虑这样一个事实,即默认情况下此更改将应用于您项目中的 所有 日期时间对象。

原文由 Alex 发布,翻译遵循 CC BY-SA 4.0 许可协议

推荐问题