【问题标题】:Formatting DateTimeField in Django在 Django 中格式化 DateTimeField
【发布时间】:2018-11-20 22:17:51
【问题描述】:

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

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 允许做这种事情吗?

【问题讨论】:

    标签: python django django-models


    【解决方案1】:

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

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

    【讨论】:

    • 这里的关键是我想保留时区。但你的答案只包含日期和时间
    【解决方案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)
    

    【讨论】:

      【解决方案3】:

      我认为您将不得不使用 isoformat。看看那个答案:

      Show the : character in the timezone offset using datetime.strftime

      【讨论】:

        【解决方案4】:

        我使用 pandas 的 to_datetime() 函数将时间转换为字符串格式。

        import pandas as pd
        record_list = myModel.objects.all()
        for idx, record in enumerate(record_list ):
            st = str(pd.to_datetime(record.start_time))
            record_list[idx].start_time = st
        

        【讨论】:

          猜你喜欢
          • 2021-09-05
          • 1970-01-01
          • 2016-09-20
          • 2012-11-08
          • 1970-01-01
          • 1970-01-01
          • 2016-09-17
          • 2016-01-21
          • 2023-03-20
          相关资源
          最近更新 更多