2016-07-15 80 views
0

我正在开发用于记录潜水的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)显示的时间。

回答

0

检查settings.py

0

你的时区设置你有没有在你的设置USE_TZ =真正的文件?如果您使用djangoadmin-startproject命令创建了应用程序,则会默认设置它。

另外,我在最后一份工作上与时区打了仗,但发现使用pytz确实有帮助。你有没有试过这个软件包?

编辑:好的人,我可能是遥远,但因为没有人其他人已经回答了,我觉得时区挣扎,这里是我注意到...

您与tz_info =无更换日期对象,但是你不想用数据库中的时区替换它吗?所以你会得到那个时区,并使用有效格式进行替换(tzinfo = blah ...)? 就像我说的我可能会离开,但如果这有助于你去。

+0

感谢您的帮助克里斯,我现在已经想通了,我贴的代码是用于存储日期时间,线路后'替换(tzinfo =无)正确的'将时区设置为用户选择的时区(dive.timezone是pytz时区对象)。 – xeonman9000

0

对不起,我不认为我很好地解释了我的问题。我终于明白了这一点,所以我会回答我自己的问题。

1)原来是很容易,Django中有一给定区域显示次模板标签:

{{ dive.date_time_in|timezone:dive.timezone|date:"Y-m-d H:i e" }} 

对于2),我碰上了[1]这导致我这个解决方案:在该视图在从数据库获取对象后,使用astimezone(...)将日期值(DB存储为UTC)转换为给定的时区。然后,我使用replace(tzinfo = None)使它变得幼稚,然后在我的表单上正确显示。

def edit_dive(request, dive_id=None): 
    dive = None 
    if dive_id != None: 
    dive = get_object_or_404(Dive, pk=dive_id) 
    local_date = dive.date_time_in.astimezone(timezone(str(dive.timezone))) 
    dive.date_time_in = local_date.replace(tzinfo=None) 

[1] http://www.saltycrane.com/blog/2009/05/converting-time-zones-datetime-objects-python/

相关问题