我正在开发用于记录潜水的Django应用程序,并且每个潜水都有一个日期时间和一个时区。我为时区使用了django-timezone-field应用程序。在Django中使用给定的时区显示时间
class Dive(models.Model):
...
date_time_in = models.DateTimeField(default=timezone.now)
timezone = TimeZoneField(default=timezone.get_current_timezone_name())
因此,用户能够输入的时间字符串(“2016年7月11日14时00分”),并选择一个时区(“亚洲/曼谷” - UTC + 0700),我然后设置时区
def log_dive(request):
if request.method == 'POST':
form = DiveForm(request.POST)
if form.is_valid():
dive = form.save(commit=False)
date = dive.date_time_in
date = date.replace(tzinfo=None)
dive.date_time_in = dive.timezone.localize(date)
dive.save()
然后,数据库存储日期时间为UTC在数据库(SELECT语句使得它在我的本地时区):
# SELECT date_time_in, timezone FROM divelog_dive ORDER BY number DESC;
date_time_in | timezone
------------------------+------------------
2014-07-11 17:00:00+10 | Asia/Bangkok
现在的日期时间在我看来,给这样的一个有两件事我正在挣扎着ith:
1)我想在给定的时区显示日期,但我似乎无法阻止它默认为TIME_ZONE设置。 2)如果用户编辑记录,编辑栏中显示的时间应该是他们最初输入的时间(14:00),而不是当前时区(17:00)显示的时间。
感谢您的帮助克里斯,我现在已经想通了,我贴的代码是用于存储日期时间,线路后'替换(tzinfo =无)正确的'将时区设置为用户选择的时区(dive.timezone是pytz时区对象)。 – xeonman9000