为什么 python 日期时间替换时区返回不同的时区?



我正在从事Python/Django项目。我正在尝试让用户使用 jQuery 插件日期时间选择器插件选择日期和时间。因此,当我选择现在选项并发布数据时,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表单来创建表单。我已经在其中添加了类作为属性并使用jquery插件,

$('.datepicker').datetimepicker({
timeFormat: 'HH:mm',
stepHour: 1,
stepMinute: 1,
});

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

form = PublishForm(request.POST)
if form.is_valid():
f = form.save(commit=False)
f.created_by_user_id = request.user.id
f.save()

而不是为了获得日期,我所做的只是f.publish_date和我使用虱子replacelocalize的其他选项非常标准。

谢谢

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

我不知道如何解决第一个问题,但我可以帮助你解决第二个问题。你需要使用 pytz 的localize函数。这仅在datetime没有附加时区时才有效,但由于您知道时区不正确,因此您可以先将其删除。

tz = pytz.timezone('America/Chicago')
dt = tz.localize(dt.replace(tzinfo=None))

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

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

最新更新