您好我有一个酒店管理系统,在这个不同的酒店(子域)不同的时区是必需的。我怎么能这样做?
答案 0 :(得分:8)
非常好Django documentation regarding timezones。当您说您希望每个子域名具有不同的时区时,您需要准确确定您的意思。通常,Django TIME_ZONE
设置用于指定默认时区。但是,在您的情况下,您实际上需要一个不同的默认TIME_ZONE
设置,具体取决于所访问的子域。
实现这一目标的最有力方法可能是:
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中管理时区的另一个不错的选择。