Django:将UTC转换为';视图';
我正在从数据库中检索数据,并将其以json格式发送到前端。现在,时间在数据库中存储为UTC,所以我想在将json格式的数据发送到前端之前更改时区及其格式。更改/转换前端的时间不是一个选项 我该怎么办 注意:我能够在模板中转换为适当的时区和格式。然而,我现在想在视图中这样做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
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)