gpt4 book ai didi

python - 如何获取访问者的当前时区,然后将 timezone.now() 转换为 Django 1.4 中的本地时间字符串?

转载 作者:太空狗 更新时间:2023-10-29 22:05:55 24 4
gpt4 key购买 nike

我知道现在 Django 1.4 的最佳实践是以 UTC 格式存储所有 datetime,我同意这一点。我也明白所有时区对话都应该在模板级别完成,如下所示:

{% load tz %}

{% timezone "Europe/Paris" %}
Paris time: {{ value }}
{% endtimezone %}

但是,我需要在 Python 中将 UTC 时间转换为 request 的本地时间。我无法使用模板标签,因为我使用 Ajax(更具体地说是 Dajaxice)以 JSON 格式返回字符串。

目前这是我的代码ajax.py:

# checked is from the checkbox's this.value (Javascript).
datetime = timezone.now() if checked else None

$ order_pk is sent to the Ajax function.
order = Order.objects.get(pk=order_pk)
order.time = datetime
order.save()

return simplejson.dumps({
'error': False,
'datetime': dateformat.format(datetime, 'F j, Y, P') if checked else 'None'
})

因此,即使当前时间是美国东部时间(我本地的时区)April 14, 2012, 5:52 p.m.,JSON 响应也将返回 April 14, 2012, 9:下午 52 点,因为那是 UTC 时间。

我还注意到 Django 为每个请求存储了一个名为 TIME_ZONE 的模板变量(实际上不是 request 变量的一部分),所以因为我的是 America/New_York,我假设 Django 可以找出每个访问者自己的本地时区(基于 HTTP header )?

无论如何,我的问题有两个:

  1. 如何在我的 ajax.py 中获取访问者的本地时区? (可能将其作为字符串参数传递,如 {{ TIME_ZONE }})
  2. 有了访问者的本地时区,如何使用 Django 的 dateformat 将 UTC timezone.now() 转换为本地时区并输出为字符串?

编辑:对于@agf

timezone.now() 给出 USE_TZ = True 时的 UTC 时间:

# From django.utils.timezone
def now():
"""
Returns an aware or naive datetime.datetime, depending on settings.USE_TZ.
"""
if settings.USE_TZ:
# timeit shows that datetime.now(tz=utc) is 24% slower
return datetime.utcnow().replace(tzinfo=utc)
else:
return datetime.now()

是否可以将 datetime 转换为 UTC 以外的时间?例如,我是否可以执行类似 current_time = timezone.now() 的操作,然后执行 current_time.replace(tzinfo=est)(EST = 东部标准时间)?

最佳答案

您需要阅读 Django Timezones docs小心。

重要的一点:

there's no equivalent of the Accept-Language HTTP header that Django could use to determine the user's time zone automatically.

您必须询问用户他们的时区是什么,或者只使用默认时区。

您还需要确保:

USE_TZ = True

在您的 settings.py 中。

有了时区 tz 后,您可以:

from django.utils import timezone

timezone.activate(tz)

datetime = timezone.now() if checked else None

获取时区 tz 中的时区感知 datetime 对象。

关于python - 如何获取访问者的当前时区,然后将 timezone.now() 转换为 Django 1.4 中的本地时间字符串?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/10157720/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com