我将让用户将事件输入我们的管理员(Django 1.4)。如果他们可以输入日期/时间并选择将在其中发生和显示的时区,那将是最直观的。
也就是说,我希望他们能够以某种方式指定“此事件将在 11 月 2 日美国东部标准时间下午 4:00 发生”,并确保它显示在该时区。
管理员似乎还没有任何处理时区条目或为日期时间字段指定时区的能力,所以我不太确定如何执行此操作。
Django在 1.4 中添加了对模型日期时间对象的时区支持。
但是,我没有使用它,我不确定它是否允许在管理员中或创建 ModelForm 时自动设置时区。
了解正在发生的事情很重要,一旦你掌握了正在做的事情,你最好使用 django 的时区支持。
忽略内部 django 支持,我会用这样的方法来解决问题:
from pytz import all_timezones, timezone
TIMEZONES = zip(all_timezones, all_timezones)
class EventModel(models.Model):
dt = models.DateTimeField() # user entry
tz = models.CharField(max_length=150,
choices=TIMEZONES) # user entry
def get_dt_in_user_timezone(self, user_profile):
event_tz = timezone(self.tz)
event_dt = event_tz.localize(self.dt) # assign timezone to datetime
# convert registered datetime to utc
# --> This can probably be bypassed
utc_dt = event_dt.astimezone(pytz.utc)
# convert to user's time defined in profile
user_tz = timezone(user_profile.tz)
return utc_dt.astimezone(user_tz)
在 python 中处理时区时,您将需要pytz。