【问题标题】:the time in DateTimeField is not correctDateTimeField 中的时间不正确
【发布时间】:2021-04-07 07:26:51
【问题描述】:

您好,我正在创建一个网站,并尝试在每次有人单击时钟按钮时将时钟及时保存到数据库中,但数据库中保存的时间减少了 8 小时。我该如何解决这个问题?

我使用 DateTimeField 的代码:

from django.db import models
from datetime import datetime, date

#Create your models here.


class Name(models.Model):
    name = models.CharField(max_length=200)
    timeIn = models.DateTimeField(auto_now_add=True, auto_now=False, blank=True)

    def __str__(self):
        return self.name

【问题讨论】:

  • 数据库中存储的时间为UTC。所以时间差了 8 小时,因为您所在的时区与 UTC 相差 8 小时
  • 我住在马来西亚,所以我要设置TIME_ZONE ='Malaysia'吗?
  • 只要您在设置中设置了USE_L10N = True,Django 就会尝试自动本地化您在模板中呈现的任何日期/时间值。见Format localization。如果项目是使用 `django-admin startproject` 创建的,则默认设置此设置,因此您很可能不需要做任何事情。至于数据库中的时间是UTC?就这样吧,无论如何你都会根据用户的语言环境向他们显示时间。

标签: python django django-models


【解决方案1】:

尝试使用 django 内置的时区模块:

from django.utils import timezone

class MyModel(models.Model):
    created_at = models.DateTimeField(default=timezone.now)

这应该使用您计算机的时区,并且不应再关闭 8 小时。

【讨论】:

  • 它给了我这个警告:(fields.E160) auto_now、auto_now_add 和 default 选项是互斥的。可能只存在这些选项之一。警告:main.Name.timeIn:(fields.W161)提供的固定默认值。提示:您似乎为此字段设置了一个固定的日期/时间/日期时间值作为默认值。这可能不是你想要的。如果您想将当前日期设为默认日期,请使用 django.utils.timezone.now
  • 尝试删除你的其他参数auto_not_add, etc你应该只需要default=timezone.now
  • 它仍然关闭了 8 小时
  • 您的 USE_TZ 和 TIME_ZONE 设置是什么?
  • @TimNyborg 我没有设置这些
【解决方案2】:

当您在settings.py 文件中将时区USE_TZ 设置为True 时,日期时间将类似于数据库中的2021-04-06 12:35:19.646177+04

当您访问它时不会产生任何问题,您可以像这样获得正确的时区感知日期时间 -

from django.utils.timezone import localtime

name = Name.objects.get(pk=1)
t = localtime(name.timeIn)

t 这里将根据您的时区给出正确的日期时间。

【讨论】:

  • 请问什么是pk?
  • pk 是主键。也可以通过id查询。
猜你喜欢
  • 2019-12-21
  • 2014-03-15
  • 1970-01-01
  • 2013-08-17
  • 2012-12-31
  • 2020-03-26
  • 2014-12-03
  • 1970-01-01
  • 2022-01-05
相关资源
最近更新 更多