【问题标题】:Django unable to change timezone from UTC formatDjango 无法从 UTC 格式更改时区
【发布时间】:2018-04-02 10:37:12
【问题描述】:

settings.py

LANGUAGE_CODE = 'en-us'

TIME_ZONE = 'Asia/Calcutta'

USE_I18N = True

USE_L10N = True

USE_TZ = True

models.py

class Mymodel(models.Model):
    auto_increment_id = models.AutoField(primary_key=True)
    datetime = models.DateTimeField(auto_now_add=True, blank=True)
    ip_add = models.CharField(max_length=30)
    data = models.TextField()

我正在向我的 URL 发出一个发布请求,该 URL 通过我的视图将数据存储到 db(使用 sqlite)。 datetime 字段始终以 UTC 格式存储时间(这是 settings.py 中 TIME_ZONE 变量的默认设置)

我已将 TIME_ZONE 更改为“亚洲/加尔各答”;参考此链接后:https://en.wikipedia.org/wiki/List_of_tz_database_time_zones

但日期时间仍以 UTC 格式存储。在谷歌搜索此问题后,我尝试将 USE_TZ 更改为 False,但这对我不起作用。

我只是在 python shell 中从 db 中查询数据。即

x = Mymodel()

for i in range(len(x)):
    print x[i].__dict__

请告知如何将时区更改为“亚洲/加尔各答”。

【问题讨论】:

  • 您是否在 Windows 上运行您的 Django 服务器?如果是这样,您的 Windows 时区是否设置为“亚洲/加尔各答”?
  • 在 mac 上运行。

标签: python django datetime


【解决方案1】:

我尝试了以下设置,对我来说效果很好。

LANGUAGE_CODE = 'en-us'

TIME_ZONE = 'Asia/Calcutta'

USE_I18N = True

USE_L10N = False

USE_TZ = False

还需要将 USE_L10N 设置为 False,格式本地化由该设置控制(应用于数字和日期)。

见以下链接:

https://docs.djangoproject.com/en/1.11/topics/i18n/timezones/

【讨论】:

    【解决方案2】:

    我已经用我自己的模型(Django v1.11.6)进行了一些测试,它似乎对我有用。

    尝试做一些测试(python manage.py shell),例如:

    from MyApp.models import Mymodel
    testmodel = Mymodel(ip_add="something", data="something")
    testmodel.save()
    testmodel.datatime
    

    启用 USE_TZ 时,它有一个 tzinfo:

    datetime.datetime(2017, 10, 21, 13, 43, 8, 718392, tzinfo=<UTC>)
    

    当 USE_TZ 被禁用时,它没有 tzinfo:

    datetime.datetime(2017, 10, 21, 15, 45, 25, 471765)
    

    我做了这两个测试大约。我的当地时间 15:45。

    这存储在我的数据库中:

    2017-10-21 13:43:08.718392 (with timezone enabled)
    2017-10-21 15:45:25.471765 (without timezone enabled)
    

    datetime表列类型为datetime(6)

    另一件事。你说你正在做一个POST。文档 sais 关于使用'auto_now_add':“请注意,始终使用当前日期;它不仅仅是您可以覆盖的默认值。因此,即使您在创建对象时为此字段设置了值,它也会被忽略” . (https://docs.djangoproject.com/en/1.11/ref/models/fields/)

    【讨论】:

    • 好的,我在 settings.py 中设置了 USE_TZ = False 并重启了服务器。但是,UTC 时区仍在添加新记录。除非我错过了什么,否则不要认为它对我有用。
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2014-11-18
    • 1970-01-01
    • 2022-07-06
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多