Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/python/331.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Python 如何将UTC时间转换为用户';Django的当地时间是什么时候?_Python_Django_Datetime_Django Templates - Fatal编程技术网

Python 如何将UTC时间转换为用户';Django的当地时间是什么时候?

Python 如何将UTC时间转换为用户';Django的当地时间是什么时候?,python,django,datetime,django-templates,Python,Django,Datetime,Django Templates,这些答案没有帮助: 所有日期时间数据都存储在我的数据库中的UTC中 我希望我的每个用户都能看到他们本地时区中的日期时间,而不是UTC。我尝试了以下代码: 设置.py TIME_ZONE = 'UTC' USE_TZ = True 视图.py from django.shortcuts import render from home_app import models from django.utils import timezone import pytz def home_view(

这些答案没有帮助:

  • 所有日期时间数据都存储在我的数据库中的UTC中

    我希望我的每个用户都能看到他们本地时区中的日期时间,而不是UTC。我尝试了以下代码:

    设置.py

    TIME_ZONE = 'UTC'
    
    USE_TZ = True
    
    视图.py

    from django.shortcuts import render
    from home_app import models
    from django.utils import timezone
    import pytz
    
    def home_view(request):
        timezone.activate(pytz.timezone('Asia/Kolkata'))
        sample_queryset = models.TimeModel.objects.all()
        return render(request, 'home/home.html', {'sample_queryset': sample_queryset,})
    
    from django.db import models
    
    class TimeModel(models.Model):
        sample_text = models.CharField(max_length=255)
        time = models.DateTimeField(auto_now=True)
    
        def __str__(self):
            return str(self.time) + ' ' + self.sample_text
    
    home.html

    {% for row in sample_queryset %}
        {% load tz %}
        {% localtime on %}
        {{ row.time }}
        {% endlocaltime %}
    {% endfor %}
    
    型号.py

    from django.shortcuts import render
    from home_app import models
    from django.utils import timezone
    import pytz
    
    def home_view(request):
        timezone.activate(pytz.timezone('Asia/Kolkata'))
        sample_queryset = models.TimeModel.objects.all()
        return render(request, 'home/home.html', {'sample_queryset': sample_queryset,})
    
    from django.db import models
    
    class TimeModel(models.Model):
        sample_text = models.CharField(max_length=255)
        time = models.DateTimeField(auto_now=True)
    
        def __str__(self):
            return str(self.time) + ' ' + self.sample_text
    
    然而,毕竟,正在打印来自数据库的相同UTC时间

    其他详细信息:

    TIME_ZONE = 'UTC'
    
    USE_TZ = True
    
    Django 1.11

    SQLite(目前,将在生产中使用Postgres)


    Python3.6.8

    在模板代码中,问题看起来应该是

    {% for row in sample_queryset %}
        {% load tz %}
        {% timezone timezone_string %}
        {{ row.time }}
        {% endtimezone %}
    
    {% endfor %}
    
    我怀疑根据这里的设置,为您拾取的时区是settings.py中的UTC
    您应该改为使用它

    我已经从SQLite迁移到Postgres,并做了以下更改:

    型号.py

    from django.shortcuts import render
    from home_app import models
    from django.utils import timezone
    import pytz
    
    def home_view(request):
        timezone.activate(pytz.timezone('Asia/Kolkata'))
        sample_queryset = models.TimeModel.objects.all()
        return render(request, 'home/home.html', {'sample_queryset': sample_queryset,})
    
    from django.db import models
    
    class TimeModel(models.Model):
        sample_text = models.CharField(max_length=255)
        time = models.DateTimeField(auto_now=True)
    
        def __str__(self):
            return str(self.time) + ' ' + self.sample_text
    
    之前:

    从django.db导入模型

    class TimeModel(models.Model):
        sample_text = models.CharField(max_length=255)
        time = models.DateTimeField(auto_now=True) # changed time to dt
    
        def __str__(self):
            return str(self.time) + ' ' + self.sample_text
    
    之后:


    有效的时区值基于Linux和其他Unix系统使用的tz(时区)数据库。值是字符串(xsd:string),格式为“区域/位置”,其中:

    区域是一个大陆或海洋名称。目前的领域包括:

    • 非洲
    • 美国(北美和南美)
    • 南极洲
    • 北极的
    • 亚洲
    • 大西洋
    • 澳大利亚
    • 欧洲
    • Etc(行政区域)。例如,“Etc/UTC”表示 协调世界时。)
    • 印第安人
    • 太平洋的
    位置是城市、岛屿或其他地区名称

    区域名称和输出缩写遵循POSIX(便携式操作系统接口)UNIX约定,该约定使用格林威治以西的正(+)符号和格林威治以东的负(-)符号,这与通常预期的相反。例如,“Etc/GMT+4”对应于UTC(即格林威治以西)后4小时,而不是UTC(协调世界时)(格林威治以东)前4小时

    您可以在settings.py中更改时区,如下所示

    LANGUAGE_CODE = 'en-us'
    
    TIME_ZONE = 'Asia/Kolkata'
    
    USE_I18N = True
    
    USE_L10N = True
    
    USE_TZ = True
    

    你能试试这个吗?已经试过了。不走运。请你看看好吗@丹尼尔罗斯曼