Django:将UTC转换为“视图”中的本地时区

时间:2014-11-08 01:43:07

标签: django django-views

我正在从数据库中检索数据并将其以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),})

4 个答案:

答案 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)

我遇到了同样的问题...有趣的是,该解决方案不适用于我,这是我的工作版本:

(在settings.py中USE_L10N = False,而USE_TZ = False)

导入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)