为什么python datetime replace timezone返回不同​​的时区?

Ami*_*dya 3 python django datetime pytz

我正在研究Python/Django项目.我试图让用户使用jQuery插件datetimepicker附加组件选择日期和时间.因此,当我选择现在选项和发布数据时,django正在以UTC偏移量保存时间.这是保存在数据库中的内容2017-03-30 13:38:00+00:00.我需要从用户的时区转换这个时间并将其保存在系统中作为utc.因为稍后我将运行脚本,它将在数据库中查找小于utc时间的数据.

实际上,脚本是让用户在网站上发布信息,让他们选择发布日期和时间.例如,如果使用发布的文章将于芝加哥时间4月2日下午1点发布,我不希望其他用户在此之前阅读该文章.因此,世界各地的人们可以在4月2日和下午1点在芝加哥阅读文章.那么我该如何使这个功能起作用呢?

我的解决方案是获取时间并删除它的时区信息replace(tzinfo=pytz.timezone('America/Chicago')),当我打印时间时,我得到了2017-03-30 13:38:00-05:51.现在的实际偏移是-05:00.任何人都可以帮助我告诉我我做错了什么吗?

我正在为表单做的是我publish_date在我的模型中有对象,我使用django表单来创建表单.我已经在其中添加了class作为属性并使用了jquery插件,

$('.datepicker').datetimepicker({
                timeFormat: 'HH:mm',
                stepHour: 1,
                stepMinute: 1,
            });
Run Code Online (Sandbox Code Playgroud)

因此,当用户提交表单时,在post方法上这是我的代码,

form = PublishForm(request.POST)

if form.is_valid():

                f = form.save(commit=False)
                f.created_by_user_id = request.user.id
                f.save()
Run Code Online (Sandbox Code Playgroud)

而不是得到我所做的所有日期f.publish_date和我使用虱子的其他选项replace,localize并且非常标准.

谢谢

Mar*_*som 9

如评论中所述,您似乎有两个问题.首先是datetimepicker使用UTC时区偏移保存日期和时间,应该应用不同的时区或完全不使用时区偏移量.其次是pytz使用错误的偏移量.

我不知道如何解决第一个问题,但我可以帮你解决第二个问题.你需要使用pytz的localize功能.这仅适用于datetime没有附加时区的情况,但由于您知道时区不正确,因此您可以先删除它.

tz = pytz.timezone('America/Chicago')
dt = tz.localize(dt.replace(tzinfo=None))
Run Code Online (Sandbox Code Playgroud)


pao*_*lov 5

日期时间函数的命名replace(tzinfo = ...)很不幸。事实上,它的行为是随机的。不要使用这个!

马克的答案是要走的路。使用本地化。