簡體   English   中英

Django:如何讓datetime對象知道它的創建時區?

[英]Django: How to make a datetime object aware of the timezone in which it was created?

我正在運行一個從遠程服務器請求海潮數據的程序。 此潮汐數據的timedate是根據我的機器的當地時區計算的。 我想使用這些本地日期和時間來創建一個datetime對象,然后我將保存在Django模型中。

datetime_obj = datetime(loc_year, loc_month, loc_date, loc_hour, loc_minute)

在將datetime對象發布到Django之前,如何確保datetime對象知道它是基於本地時區創建的?

我想,在發布之前我希望它看起來像這樣:

datetime_obj = datetime(loc_year, loc_month, loc_date, loc_hour, loc_minute, loc_timezone)

如何動態獲取機器的本地時區? 以及如何確保所有用戶都將時間轉換為他們自己的本地時區。

首先,確保您熟悉Django 關於時區文檔 ,設置USE_TZ = True ,然后安裝pytz

我不太明白你的約會對象來自哪里。 如果它來自服務器作為其數據的一部分(即它表示測量潮汐時),它應該已經是UTC,或者您需要知道它們正在使用的時區。 如果您正在創建它,那么最簡單的方法就是在創建模型實例時使用django.utils.timezone.now() (它返回一個時區感知的日期時間)。

如果您確實需要按照自己的描述手動創建它,請按照此處的用法使用make_aware()

from django.utils.timezone import make_aware

naive = datetime(loc_year, loc_month, loc_date, loc_hour, loc_minute)
make_aware(naive)  # current timezone, or...
make_aware(naive, timezone=pytz.timezone("Europe/Helsinki"))  # ...specific timezone

除非您使用activate()指定其他時區,否則當前時區將是默認時區(由TIME_ZONE設置定義)。 默認時區可能與服務器的系統時區相同,也可能不同。 這個答案中討論了以pytz可以理解的格式獲取系統時區。

最后,確保用戶所看到的時間轉換為當地時區是不平凡的,因為討論在這里

當前時區等同於當前翻譯的區域設置。 但是,沒有相當於Django可以用來自動確定用戶時區的Accept-Language HTTP標頭。 相反,Django提供時區選擇功能。 使用它們來構建對您有意義的時區選擇邏輯。

請參閱那里的示例以獲得指導。

from django.utils import timezone
import pytz

timezone.activate(pytz.timezone("Asia/Kolkata"))
timezone.localtime(timezone.now())

暫無
暫無

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

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