【问题标题】:How to set TimeField alone 00:00:00: in django如何单独设置 TimeField 00:00:00:在 django 中
【发布时间】:2018-09-26 05:54:53
【问题描述】:

在这里,我在此日期字段中提到了我的 model.py,默认我想将时区指定为 00:00:00,所以请帮我这样做。

Models.py

class Dummy(models.Model):
    name = models.CharField(max_length=100)
    date = models.DateTimeField(null=True,auto_now_add=True)

预期输出

{
    "id": 1,
    "name": "xxxx",
    "date": "2018-09-26T00:00:00Z"
}

实际输出

{
    "id": 1,
    "name": "xxxx",
    "date": "2018-09-26T05:52:26.626604Z"
}

【问题讨论】:

  • @MohitSolanki TIMEZONE = 'UTC' 除了这种情况,我想在设置中添加 TIMEZONE = 'UTC' 后更改 models.py bcoz 中的任何内容,我也得到相同的输出,如2018-09-26T06:07:15.626452Z
  • 你必须手动更新现有对象的时区` `
  • @MohitSolanki 手动表示你能告诉我该怎么做吗?

标签: python django django-models


【解决方案1】:

来自 Field.default 的 Django 文档:

字段的默认值。这可以是一个值或可调用的 目的。如果可调用,它将在每次有新对象时被调用 创建的。

这样做:

from datetime import datetime, timedelta

def default_start_time():
    now = datetime.now()
    start_time = now.replace(hour=00, minute=0, second=0, microsecond=0)
    return start_time 

class Dummy(models.Model):
    name = models.CharField(max_length=100)
    date = models.DateTimeField(null=True,auto_now_add=True,default=default_start_time)

【讨论】:

    【解决方案2】:

    使用DateField 代替DateTimeField

    【讨论】:

    • 如果我使用 DateField 它只是单独获取日期,但我需要以这种格式输出 "date": "2018-09-26T00:00:00Z"
    【解决方案3】:

    您似乎根本不需要时间组件;如果您打算在所有情况下将其归零,则存储它是没有意义的。

    只保留日期,并在您的序列化程序中,使用日期来实例化日期时间。

    from datetime import date, datetime
    
    
    # Where t would normally be a date from your model...
    t = date.today()
    print(datetime(t.year, t.month, t.day).isoformat())
    # 2018-09-26T00:00:00
    

    您尚未向我们提供有关如何生成此 JSON 的信息,但如果您使用 Django 的内置序列化,您可以 write a custom encoder 以这种方式将日期转换为零时间日期时间。

    【讨论】:

      【解决方案4】:

      您可以使用.replace() 方法删除datetime 对象的time 部分:

      self.date = self.date.replace(hour=0, minute=0, second=0, microsecond=0)
      

      这将导致:

      datetime.datetime(2018, 9, 26, 0, 0)
      

      【讨论】:

        猜你喜欢
        • 1970-01-01
        • 1970-01-01
        • 2014-10-10
        • 2016-04-18
        • 2013-07-23
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        相关资源
        最近更新 更多