我在“models.py”中有一個日期時間:class Foo(models.Model): modified = models.DateTimeField()當我在模板中顯示它時,它會根據(jù)我的區(qū)域設置(我處于英國夏令時間)正確顯示:{{ foo.modified }}設置:LANGUAGE_CODE = 'en-gb'TIME_ZONE = 'Europe/London'USE_I18N = TrueUSE_L10N = TrueUSE_TZ = True正確輸出我所期望的“2020 年 9 月 7 日下午 2:43”(在視圖中打印“已修改”給出“2020-09-07 13:43:40.988953+00:00”)。但是,當我嘗試將此格式復制到視圖中的字符串時,我得到了錯誤的日期/時間(它沒有調整一小時):from django.utils.formats import localizefrom app.models import Foofoo = get_object_or_404(Foo, pk=1)modified = localize(foo.modified, use_l10n=True)print(modified)輸出“7 Sep 2020, 1:43 pm”,這是錯誤的。
2 回答

絕地無雙
TA貢獻1946條經驗 獲得超4個贊
代碼中的對象datetime
將位于數(shù)據(jù)庫(或數(shù)據(jù)庫適配器)返回的時區(qū)中。通常是 UTC(在本例中),這就是打印值相差一個小時的原因。
這些會自動轉換為當前時區(qū)(TIME_ZONE
默認情況下),以便與用戶(表單和模板)進行交互,這就是您的模板視圖正確的原因。
如果要將datetime
代碼中的對象轉換為當前時區(qū),請使用localtime()
:
from?django.utils.timezone?import?localtime local_modified?=?localtime(foo.modified)

九州編程
TA貢獻1785條經驗 獲得超4個贊
from django.utils import timezone
from django.templatetags.l10n import localize
def localize_datetime(value):
return localize(timezone.template_localtime(value))
我為此目的編寫了這個函數(shù)。我試圖找出 Django 如何處理框中的日期時間字段,在 Django admin 中它會自動將值轉換為本地時區(qū)并應用 FORMAT_MODULE_PATH 中定義的格式的格式。
所以timezone.template_localtime - 如果 settings.USE_TZ 開啟,則將值轉換為本地時間
并本地化- 應用格式
添加回答
舉報
0/150
提交
取消