2016-01-28 37 views
5

我有一个Django模型与datetime字段。保存时,存储在我的DB中的日期时间字段会丢失时区信息,因此它将保存为日期时间的幼稚。一般来说,这不是一个问题,因为在模板中呈现日期时间字段时,Django会自动将其转换回来。Django日期时间字段 - 转换为时区在视图

但是视图呢?假设我需要日期时间服务器端的字符串表示。根据夏季/冬季时间的不同,我的时区可能是GTM + 1或GMT + 2,这会让事情变得更加困难。

那么我该如何申请本地tz转换在视图?我用pytz尝试了几种方法。没有成功,青梅条目转换为GMT + 1和他人GMT + 2 :(

system_tz = pytz.timezone('Europe/Berlin') 
local_dt = item.created_at.astimezone(system_tz) 
local_dt = system_tz.normalize(local_dt) 

附加信息:

  • 的Django 1.8.7
  • 设置。 .USE_TZ = True
  • MySQL
  • 为什么我这样做?因为我有一张表,它通过AJAX按需加载其所有行。我需要在将它们发送给客户端之前使用strftime()准备日期时间值。

回答

3
from django.utils import timezone 

local_dt = timezone.localtime(item.created_at, pytz.timezone('Europe/Berlin')) 

要conevert为UTC + 1:

from django.utils import timezone 

local_dt = timezone.localtime(item.created_at, timezone.get_fixed_timezone(60) 
+0

同样的结果。一些条目转换为GMT + 1,其他条目转换为GMT + 2。也许是因为我的时区是夏令时,但现在都应该是GMT + 1。 – pisapapiros

+0

pisapapiros 2016-03-20(时间变更前)是UTC + 1,2016-03-30(时间变更后)是UTC + 2 http://www.timeanddate.com/time/zone/germany/berlin。 – vsd

+0

哦,就是这样!我尝试了太多的东西,终于搞砸了我的想法,但输出结果是正确的!感谢弗拉基米尔帮助解决问题 – pisapapiros

0

有没有NE ED使用django.utils到时区之间进行转换:

berlin = pytz.timezone('Europe/Berlin') 
local_dt = item.created_at.astimezone(berlin) 

然而,如果你平时只用一个时区工作,可以很方便地将其存储在settings.TIME_ZONE = 'Europe/Berlin'然后

local_dt = timezone.localtime(item.created_at) 

将其转换为您的本地时间。

相关问题