Django:将UTC转换为';视图';

Django:将UTC转换为';视图';,django,django-views,Django,Django Views,我正在从数据库中检索数据,并将其以json格式发送到前端。现在,时间在数据库中存储为UTC,所以我想在将json格式的数据发送到前端之前更改时区及其格式。更改/转换前端的时间不是一个选项 我该怎么办 注意:我能够在模板中转换为适当的时区和格式。然而,我现在想在视图中这样做 def fetchinfo(请求): uid=int(request.user.id) data=UserLog.objects.filter(user\u id=uid).值('event\u id\u descriptio

我正在从数据库中检索数据,并将其以json格式发送到前端。现在,时间在数据库中存储为UTC,所以我想在将json格式的数据发送到前端之前更改时区及其格式。更改/转换前端的时间不是一个选项

我该怎么办

注意:我能够在模板中转换为适当的时区和格式。然而,我现在想在视图中这样做

def fetchinfo(请求):
uid=int(request.user.id)
data=UserLog.objects.filter(user\u id=uid).值('event\u id\u description'、'time'、'ip\u address')
返回JsonResponse({'status':'success','data':列表(数据),})

我创建了这个小函数来解决项目中的问题:

import pytz
from django.utils import timezone


def convert_to_localtime(utctime):
  fmt = '%d/%m/%Y %H:%M'
  utc = utctime.replace(tzinfo=pytz.UTC)
  localtz = utc.astimezone(timezone.get_current_timezone())
 return localtz.strftime(fmt)
一个习惯用语,如:

utcdate = convert_to_localtime(date_from_db)

我还安装了这个应用程序:

我也有同样的问题。。。有趣的是,这个解决方案不适用于我,以下是我的工作版本:

(在settings.py中,使用_L10N=False,使用_TZ=False) 进口皮茨 本地进口

def convert_to_localtime(utc):
  fmt = '%d/%m/%Y %H:%M'
  ltz = tzlocal.get_localzone()
  localtz = utc.replace(tzinfo=pytz.utc).astimezone(ltz)
  return localtz.strftime(fmt)

Local是python的内置函数。您应该重命名变量名。请注意,本例中的localtz将位于远程用户本地时区(如果在视图中使用),而不是服务器时区–这太棒了!还请注意,变量utc可能与某些导入的模块冲突,如“from django.utils.timezone import utc”,请在此处添加警告:如果
date\u from\u db
为None,
localtime()
返回当前时间。atb00ker的捕获效果良好。。。我将相应地更正我的代码片段。谢谢;)
def convert_to_localtime(utc):
  fmt = '%d/%m/%Y %H:%M'
  ltz = tzlocal.get_localzone()
  localtz = utc.replace(tzinfo=pytz.utc).astimezone(ltz)
  return localtz.strftime(fmt)