Django datetime字段 - 在视图中转换为时区

pis*_*ros 7 python mysql django datetime

我有一个带有日期时间字段的Django模型.保存时,存储在我的数据库中的日期时间字段会丢失时区信息,因此会将其保存为天真的日期时间.一般来说,这不是问题,因为Django在模板中呈现datetime字段时会自动将其转换回来.

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

那么如何在视图中应用本地tz转换?我用pytz尝试了几种方法.没有成功,ome条目转换为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)
Run Code Online (Sandbox Code Playgroud)

附加信息:

  • Django 1.8.7.
  • settings.USE_TZ = True
  • MySQL的
  • 我为什么要这样做?因为我有一个表,可以通过AJAX按需加载所有行.在将它们发送到客户端之前,我需要使用strftime()准备datetime值.

vsd*_*vsd 9

from django.utils import timezone

local_dt = timezone.localtime(item.created_at, pytz.timezone('Europe/Berlin'))
Run Code Online (Sandbox Code Playgroud)

要转换为UTC + 1:

from django.utils import timezone

local_dt = timezone.localtime(item.created_at, timezone.get_fixed_timezone(60)
Run Code Online (Sandbox Code Playgroud)


Ant*_*ins 8

无需用于django.utils在时区之间进行转换:

berlin = pytz.timezone('Europe/Berlin')
local_dt = item.created_at.astimezone(berlin)
Run Code Online (Sandbox Code Playgroud)

但是,如果您通常只使用一个时区,那么将其存储在其中settings.TIME_ZONE = 'Europe/Berlin',然后

local_dt = timezone.localtime(item.created_at)
Run Code Online (Sandbox Code Playgroud)

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