如何在Django中设置不同的时区

时间:2013-08-19 05:32:43

标签: python django django-forms

您好我有一个酒店管理系统,在这个不同的酒店(子域)不同的时区是必需的。我怎么能这样做?

2 个答案:

答案 0 :(得分:8)

非常好Django documentation regarding timezones。当您说您希望每个子域名具有不同的时区时,您需要准确确定您的意思。通常,Django TIME_ZONE设置用于指定默认时区。但是,在您的情况下,您实际上需要一个不同的默认TIME_ZONE设置,具体取决于所访问的子域。

实现这一目标的最有力方法可能是:

  • 始终在UTC中存储日期,与分配给子域的时区无关。
  • 编写一些自定义Django中间件,它将设置每个请求到达时使用的默认时区。上面链接的Django文档给出了一个例子。这是一个例子:
import django.utils.timezone
from pytz import timezone

class TimezoneMiddleware(object):
    def process_request(self, request):
        # Put logic here to choose timezone based on domain.
        if request.META['HTTP_HOST'] == 'hotel1.subdomain.com':
            tz = timezone('US/Eastern')
        else:
            tz = timezone('UTC')

        if tz:
            django.utils.timezone.activate(tz)
        else:
            django.utils.timezone.deactivate()

现在,当Django处理输入或显示的日期时,它将使用中间件选择的时区。这不能解决将用户置于与其设置时区的子域不同的时区的问题。通常,这个问题可以通过让每个Django用户存储他们的首选时区来解决,中间件会根据他们的会话数据选择时区,如文档中所述。

答案 1 :(得分:0)

下面的代码可用于更改时区。

import os,time

os.environ['TZ'] = 'Asia/Shanghai'

http://en.wikipedia.org/wiki/List_of_tz_database_time_zones中有一个时区列表。

Pytz是在python中管理时区的另一个不错的选择。