簡體   English   中英

如何在 Django 中將 UTC 時間轉換為用戶的本地時間?

[英]How Do I Convert UTC Time To User's Local Time in Django?

這些答案沒有幫助:

  1. 獲取正確的本地時區以在 Django Web 應用程序中為最終用戶顯示

  2. 同一應用程序中的Django不同時區

所有日期時間數據都以 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,})

主頁.html

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

模型.py

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 時間。

其他詳情:

Django 1.11

SQLite(目前;將在生產中使用 Postgres)

蟒蛇 3.6.8

有效的時區值基於 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

問題出現在您的模板代碼中,它應該類似於

{% for row in sample_queryset %}
    {% load tz %}
    {% timezone timezone_string %}
    {{ row.time }}
    {% endtimezone %}

{% endfor %}

我懷疑根據這里本地時間為您獲取的時區是來自 settings.py 的 UTC 您應該使用它而不是時區

我已經從 SQLite 遷移到 Postgres 並進行了以下更改:

模型.py

前:

從 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

后:

from django.db import models

class TimeModel(models.Model):
    sample_text = models.CharField(max_length=255)
    dt = models.DateTimeField(auto_now=True) # changed time to dt

    def __str__(self):
        return str(self.dt) + ' ' + self.sample_text

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM