我正在从数据库中检索数据并将其以json的形式发送到前端。现在时间在UTC中存储为数据库,所以我想在将数据发送到前端之前更改时区及其格式。改变/转换前端的时间不是一种选择。
我该怎么办?
注意:我可以在模板中转换为适当的时区和格式。但是我现在想在视图中这样做。
def fetchinfo(request):
uid = int(request.user.id)
data = UserLog.objects.filter(user_id=uid).values('event_id__description','time','ip_address')
return JsonResponse({'status':'success','data':list(data),})
答案 0 :(得分:6)
我创建了这个小函数来解决项目中的问题:
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)
我还安装了这个应用:django-tz-detect
答案 1 :(得分:6)
from django.utils import timezone
local_dt = timezone.localtime(date_from_db) if date_from_db is not None else None
答案 2 :(得分:1)
我来这里是为了在Django视图中获取本地时间。有时有情况。所以在这里应该有用:
try {
final response = await Dio().get(url);
dynamic jsonResponse = response.data;
print("response body :: $jsonResponse");
}
on DioError catch(error) {
print('Error Details :: ${error.message}');
dynamic jsonResponse = error.response.data ?? " ";
print("response body :: $jsonResponse");
}
答案 3 :(得分:1)
我遇到了同样的问题...有趣的是,该解决方案不适用于我,这是我的工作版本:
导入pytz 导入tzlocal
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)