我正在撰写一个跨多个时区在全球范围内提供服务的网站。
在settings.py中:
TIME_ZONE = 'UTC'
USE_TZ = True
我想知道来自新西兰的某人是否通过models.DateTimeField
投放日期时间,是否会自动获取当前时区并转换为UTC而无需任何额外代码?
我对这一段感到有点困惑:
当前时区相当于当前的语言环境 翻译。但是,没有相应的Accept-Language Django可以用来确定用户时区的HTTP头 自动。相反,Django提供时区选择功能。 使用它们来构建有意义的时区选择逻辑 你。
所以我必须覆盖save方法才能添加get_current_timezone()
?
答案 0 :(得分:2)
关键句是:“但是,没有相当于Django可以用来自动确定用户时区的Accept-Language HTTP标头。”
因此Django无法可靠地计算出新西兰用户的时区。它不会给你用户的时区 - 你必须告诉它!具体来说,在您明确activate()
某个时区之前,当前时区只是您在UTC
设置中定义的TIME_ZONE
。
当涉及到用户输入时,documentation说:“Django解释在当前时区的表单中输入的日期时间并返回知道的日期时间对象。”因此,如果您activated
适当的新西兰时区,那么转换将按照您的预期进行。但如果没有,日期时间将被解释为默认的UTC
时区。
你如何计算用户的时区? documentation给出了一个示例,说明如何根据用户明确选择的值来设置它。我确信还有一些服务可以根据IP地址猜测时区。无论哪种方式,Django都不会为你做这件事。