【问题标题】:Django doesnot returns datetime value in stored formatDjango 不以存储格式返回日期时间值
【发布时间】:2015-06-18 12:53:17
【问题描述】:

在 Django 中卡住了。

我已经在我的 PostgreSQL 数据库中存储了一个值

TIME_ZONE = 'Asia/Kolkata'

格式,但是当我从 Django 获取相同的格式时,它会转换为 UTC。

例子:

我的 postgres 表中有一个时间线字段,其存储值为 2015-05-02 05:29:59+05:30

当我从 django shell 获取它时,它会给出datetime.datetime(2015, 5, 1, 23, 59, 59, tzinfo=UTC)

请提供帮助。我需要更改 Django 中的任何设置吗?我目前的设置是:

TIME_ZONE = 'Asia/Kolkata'
USE_I18N = True
USE_L10N = True
USE_TZ = True

除此之外,tzlocal 提供所需的时区值

>>> from tzlocal import get_localzone
>>> get_localzone()
<DstTzInfo 'Asia/Kolkata' LMT+5:53:00 STD>

【问题讨论】:

  • 它是 postgres 中的'带时区的时间戳'。
  • 在选择命令中按预期以 2015-05-02 05:29:59+05:30 格式输出。
  • 在 select 命令中按预期输出 2015-05-02 05:29:59+05:30 格式。当我使用 django shell 从数据库中清除值时,我期望得到相同的输出,当前输出是 :>>> obj.timeline datetime.datetime(2015, 5, 1, 23, 59, 59, tzinfo=)跨度>
  • 在 DB 中选择查询给出了完美的结果,当我从 django 中的 db 获取数据时出现问题,它仅转换为 UTC 格式。
  • db 中 select 命令的输出为 :greymeter2=# select timeline from myapp_test where id=6;时间线 --------------- 2015-05-02 05:29:59+05:30(1 行)

标签: python django postgresql datetime timezone


【解决方案1】:

根据docs:

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

因此,您似乎只会在模板中获得正确的时区,而不是在 shell 中。

但是,要以您的格式查看日期,假设字段的名称是 date_created,您可以这样做

from django.utils import timezone

print str(timezone.localtime(obj.date_created))

或者您可以在Usage docs 中尝试这些方法

【讨论】:

  • 我已将 postgres 中的数据库设置更改为 postgresql.conf 文件中的 timezone = 'Asia/Calcutta' ,因此 django 仅将值存储在预期的 IST 时区中,您是说 django 将始终以 UTC 格式返回仅格式,无论存储数据的格式如何?同样在我的 django 设置时区是 TIME_ZONE = 'Asia/Kolkata' ,请协助
  • 或者有什么办法可以清除存储在数据库中的数据?
  • 我更新了答案,尝试将时间字段包装在“str()”中
  • 它仅以字符串格式提供收集的时间,即 '2015-05-01 23:59:59+00:00' ,我的值以 +5:30 时区格式存储在 DB 中,但 django 转换当我从数据库中获取它时它为 UTC 格式,我想要的只是以 +5:30 时间格式获取数据。示例 :: db 中的数据是 - 2015-05-02 05:29:59+05:30 但是当我从 django 获取它并将其类型转换为 str 它给出 >>> str(obj.timeline) '2015-05- 01 23:59:59+00:00' ,因此请参阅格式更改为 UTC ,这就是问题
  • @NirmalVatsyayan 我再次更新了我的答案。如图所示使用时区功能。那应该行得通。另外,今后,请尝试in this comment here 的建议以默认获取此格式
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2016-01-11
  • 1970-01-01
  • 1970-01-01
  • 2018-11-09
  • 2018-05-08
  • 1970-01-01
相关资源
最近更新 更多