当前位置: 首页 > 面试题库 >

Django DateTimeField存储日期时间,与tzinfo无关

何升
2023-03-14
问题内容

为什么Django的DateTimeField恢复tzinfodatetime,以<utc>

下面是我的测试代码。

是正常还是错误。

如果正常,那是什么原因?

models.py
class Date(models.Model):
  datetime = models.DateTimeField()


settings.py
TIME_ZONE = 'Asia/Seoul'
USE_TZ = True


test.py
from django.utils import timezone

datetime = timezone.localtime(timezone.localtimezone.now())
#now datetime is datetime.datetime(2015, 10, 22, 20, 31, 56, 248000, tzinfo=<DstTzInfo 'Asia/Seoul' KST+9:00:00 STD>)

models.Date(datetime=datetime).save()
#If I check datebase, It shows 2015-10-22 11:31:56.248000

model.Date.object.get(..)
#It returns datetime.datetime(2015, 10, 22, 11, 31, 56, 248000, tzinfo=<UTC>)

我期待django商店2015-10-22 20:31:56.248000并返回datetime.datetime(2015, 10, 22, 20, 31, 56, 248000, tzinfo=<DstTzInfo 'Asia/Seoul' KST+9:00:00 STD>)

- - - - - - - 编辑 - - - - - - - -

我用过Sqlite


问题答案:

确保阅读Django的时区文档。在第一句话中简要说明了该方法:

启用时区支持后, Django将日期时间信息存储在数据库中的UTC中,在
内部使用可识别时区的日期时间对象,并将其以模板和形式转换为最终用户的时区。

因此,是的,在UTC中看到数据库的返回值是正常的。

至于原因,文档指出:

即使您的网站仅在一个时区中可用,将数据存储在数据库中的UTC中仍然是一种好习惯。主要原因是夏令时(DST)。许多国家/地区采用夏令时制,时钟在春季向前移动,在秋季向后移动。如果您在当地时间工作,那么转换时每年可能会遇到两次错误。

网站还链接了更详细的描述中pytz的文档。



 类似资料:
  • 日期与时间 避免使用 DateTime,除非你确实需要处理历法改革(儒略/格里历的改革),此时通过设置 start 参数来明确你的意图。 # 差 - 使用 DateTime 表示当前时间 DateTime.now # 好 - 使用 Time 表示当前时间 Time.now # 差 - 使用 DateTime 表示近现代日期 DateTime.iso8601('2016-06-29') # 好 -

  • 日期与时间 手动设定 可手动设定年/月/日/时/分/秒(12小时制的AM / PM)。 透过因特网设定 经由因特网自动取得日期、时间。 网络联机的详细说明,请参阅(网络设定) > [Infrastructure模式]。 提示 将(设定)>(主题设定) > [颜色]设定为[每月]时,将会于变更[日期与时间]的月份后,自动改变背景颜色。

  • 问题内容: 我在这里看到了一些相关的问题……本质上,我想要的是将日期时间存储为UTC,并让应用程序用户选择他想显示日期的时区-time in。 由于似乎日期时间字段受基础JDBC驱动程序的影响,所以我想知道这是否是存储UTC日期时间的可接受方法: 将MySQL和Application Server计算机都设置为UTC时区(无需分开) MySQL和JVM都应该选择基础系统时间设置(如果没有其他说明的

  • 问题内容: 我有一个脚本,需要在脚本的不同行执行以下命令: 在我的陈述中,我有以下内容: 我收到以下错误: 如果我将语句的顺序更改为: 我收到以下错误: 如果我再次将语句更改为: 我收到以下错误: 这是怎么回事,我怎么都可以工作? 问题答案: 您的麻烦是,您有一些代码希望对 模块 进行引用,而其他代码希望对类进行引用 。 显然,不能两者兼有。 当您这样做时: 您首先要设置为对该类的引用,然后立即将

  • 这是我的Firebase结构 我想在每个用户的第二个名字下面的“预订”下存储一天中的日期和时间,然后选择一天中的日期和时间。 这是我到目前为止用错误的方法得到的结果。它在名为“MyBookings”的单独子节点下设置日期 基本上,我所做的是单击一个显示日期和时间选择器的EditText,我需要将该日期存储在Firebase实时数据库中。 这是我的Firebase参考,我知道它是错误的,但不知道如何

  • 您可以在 M600 上手动设置日期与时间,或与手机和网络自动同步日期与时间*。 更改日期与时间设定 导航至 Settings(设定)应用程式,找出并轻触 System(系统)。 轻触 Date & time (日期和时间)。 轻触 Automatic date & time(自动同步日期与时间)。 选择并轻触您想使用的方式: 与手机同步 与网络同步:如果您选择该选项,您还可以选择采用24小时制或1