【问题标题】:How to get correct datetime in django for timezone如何在 django 中为时区获取正确的日期时间
【发布时间】:2015-07-29 11:13:43
【问题描述】:

我的设置文件中有这个

USE_TZ = True

现在我的时区是Europe/Paris

现在我像这样在 django 中保存日期时间

obj.start_date = datetime.strptime('Apr 27 2015 9:00AM', '%b %d %Y %I:%M%p')

我知道在数据库中 django 保存 utc 格式。在数据库中就像

2015-04-26 23:00:00+00

我的问题是我根据日期进行计算

我输入了日期27 April,但在数据库中它被存储为26 April

当我执行 obj.start_date.date() 时,我会得到 4 月 26 日,而不是我想要 4 月 27 日

时间也不同。

我的 All 计算出错了。

我需要使用什么命令来获取正确的日期和时间

【问题讨论】:

    标签: python django postgresql date datetime


    【解决方案1】:

    问题在于,在创建 datetime 对象时,您没有提供有关其时区的任何信息。因此它被创建为一个简单的日期时间,这会导致存储错误的值。

    试试这个:

    from pytz import timezone
    from datetime import datetime
    
    tz_france = timezone('Europe/Paris')
    loc_dt = tz_france.localize(datetime.strptime('Apr 27 2015  9:00AM', '%b %d %Y %I:%M%p'))
    

    它应该为您提供本地化的日期时间对象,该对象可以由 Django 正确转换为 UTC 并保存在数据库中。示例来自http://pytz.sourceforge.net/

    【讨论】:

    【解决方案2】:

    看看Django Timezone,它使用可感知的日期时间对象而不是幼稚的(使用日期时间库时)。文档中有许多示例说明如何利用时区在视图和模板中转换为您想要的时区。

    还请查看pytz 库,Django 建议您也安装它。

    【讨论】:

    • 感谢您阅读了很多次但无法完全理解。如果我必须让它工作,你能告诉我我的代码会是什么样子吗
    猜你喜欢
    • 2013-04-07
    • 2014-05-23
    • 2014-08-25
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2015-02-06
    相关资源
    最近更新 更多