3

嗨,我有一个酒店管理系统,在这个系统中,不同的酒店(子域)需要不同的时区。我怎样才能做到这一点?

4

2 回答 2

13

关于 timezones有非常好的Django 文档。当您说您希望每个子域使用不同的时区时,您需要确切地确定您的意思。通常,DjangoTIME_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 用户存储他们喜欢的时区来解决,中间件会根据文档中描述的会话数据来选择时区。

于 2013-08-19T06:27:12.917 回答
0

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

import os,time

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

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

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

于 2013-08-19T05:45:10.623 回答