我有一个带有日期时间字段的Django模型。保存后,存储在 DB 中的日期时间字段会丢失时区信息,因此会将其保存为天真日期时间。一般来说,这不是问题,因为当在模板中渲染日期时间字段时,Django会自动将其转换回来。
但是这个观点呢?假设我需要日期时间服务器端的字符串表示。根据夏季/冬季时间,我的时区可能是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)
其他信息:
答案 0 :(得分:7)
from django.utils import timezone
local_dt = timezone.localtime(item.created_at, pytz.timezone('Europe/Berlin'))
要转换为UTC + 1:
from django.utils import timezone
local_dt = timezone.localtime(item.created_at, timezone.get_fixed_timezone(60)
答案 1 :(得分:1)
无需使用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)
会将其转换为您当地时间。
答案 2 :(得分:0)
django 在 django.utils.timesince 模块中提供了 timesince 函数
我用这个
from django.utils.timesince import timesince
since = a_datetime_object
return timesince(since)
你也可以传递第二个参数作为引用而不是 datetime.now()
可能的输出是 “2周3天”和“1年3个月”等