Django-UTC到本地时间的转换失败

问题描述

我想将UTC时间转换为本地时间

我的settings.py

TIME_ZONE = 'UTC'

USE_I18N = True

USE_L10N = True

USE_TZ = True

我的模型。py

class UnauthorizedAccess(models.Model):
    UnauthorizedAccessId = models.AutoField(primary_key=True,db_column='UnauthorizedAccessId')
    Camera = models.ForeignKey(Camera,on_delete=models.CASCADE,db_column='CameraId')
    AccessTime = models.DateTimeField()
    Description = models.CharField(max_length=250)

    class Meta:
        db_table = "UnauthorizedAccess"

views.py

from datetime import date,datetime
from django.utils import timezone
from tzlocal import get_localzone
import pytz

@api_view(['POST'])
@permission_classes([])
def push_notification(request):
        cam_id = request.data.get("CameraId").strip()
        camera_ob = Camera.objects.get(CameraId=cam_id)
        unauthorized_entry = UnauthorizedAccess(
            Camera=camera_ob,AccessTime=timezone.now(),Description=unauthorized_access,)
        unauthorized_entry.save()
        return Response({msg:  validation["FDP25"]},status=status.HTTP_200_OK)
    except Exception as ex:
        logging.getLogger("error_logger").exception(repr(ex))
        return Response({msg: validation["FDP23"]},status=status.HTTP_400_BAD_REQUEST)

在保存时我尝试了AccessTime = datetime.now(tz = timezone.utc)和AccessTime = datetime.now() 现在我正在使用timezone.now()

我的数据库保存了数据

Database Data

我试图检索我的数据

我的views.py 从datetime导入日期开始,datetime 从django.utils导入时区 从tzlocal导入get_localzone 导入pytz

@api_view(['GET'])
@permission_classes([])
def notification(request):
    try:
        unauthorizedaccess_details = list()
        tz = get_localzone()
        notification_ob = UnauthorizedAccess.objects.all().order_by('-AccessTime')[:50]
        for ob in notification_ob:
            dev = Device.objects.get(Camera=ob.Camera)

            tz = get_localzone()
            localtz = ob.AccessTime.replace(tzinfo=pytz.utc).astimezone(tz)
            date_time = localtz.strftime("%d/%m/%Y %I:%M:%S %p")

            tz1 = ob.AccessTime.replace(tzinfo=pytz.UTC)
            localtz1 = tz1.astimezone(timezone.get_current_timezone())
            date_time1 = localtz1.strftime("%d/%m/%Y %I:%M:%S %p")

            unauthorizedaccess_info = {
                'id': ob.UnauthorizedAccessId,'DeviceName': dev.DeviceName,'Date': date_time,'Date1': date_time1,'Date2': ob.AccessTime,'Date3':  ob.AccessTime.strftime("%d/%m/%Y %I:%M:%S %p"),'Access': ob.Description,'Type': '1'
            }
            unauthorizedaccess_details.append(unauthorizedaccess_info)
            return JsonResponse(unauthorizedaccess_details,safe=False,status=status.HTTP_400_BAD_REQUEST) 

我尝试了这些方法来获取正确的时间

当我使用本地主机作为url运行此程序时,我得到了这个答案(我仅显示1个设置数据作为示例)

{
        "id": 124,"DeviceName": "FDP01","Date": "18/08/2020 06:14:43 PM","Date1": "18/08/2020 12:44:43 PM","Date2": "2020-08-18T12:44:43.127Z","Date3": "18/08/2020 12:44:43 PM","Access": "Unauthorized entry","Type": "1"
    }

然后使用我的服务器网址获取的相同数据是

{
        "id": 125,"Date": "18/08/2020 12:49:05 PM","Date1": "18/08/2020 12:49:05 PM","Date2": "2020-08-18T12:49:05.675Z","Date3": "18/08/2020 12:49:05 PM","Type": "1"
    }

我希望服务器提供以下格式的答案:“ Date”:“ 18/08/2020 06:14:43 PM”(date1和Date2是我尝试过的代码示例)

使用服务器网址日期未转换为我的本地时区

  1. 我如何获得正确的日期?
  2. 我犯了什么错误?

解决方法

暂无找到可以解决该程序问题的有效方法,小编努力寻找整理中!

如果你已经找到好的解决方法,欢迎将解决方案带上本链接一起发送给小编。

小编邮箱:dio#foxmail.com (将#修改为@)