在Django中格式化DateTimeField

时间:2018-11-20 22:17:52

标签: python django django-models

使用DateTimeField通过以下方式将时间戳记保存在Django的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可以做这种事情吗?

4 个答案:

答案 0 :(得分:2)

您可以覆盖DateTimeField的{​​{1}}方法并在其中添加更改。例如:

value_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 ''

答案 1 :(得分:0)

如果要在显示时设置其格式,可以使用:Class A: var = "" def __init__(self,name): self.name = name A.var = name A_obj = A("John")

您还可以进行creation_timestamp.strftime("%Y-%m-%d%H:%M:%S")以该格式保存,但这将要求进行一系列更改,这些更改将适用于整个系统:

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

  1. DateTimeField
  2. DATETIME_FORMAT="%Y-%m-%d%H:%M:%S"用于制作烦人的本地化数据在日期格式方面没有先例。
  3. L10N=False

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

答案 2 :(得分:0)

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

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

答案 3 :(得分:0)

我使用 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