簡體   English   中英

django rest 框架與 postgresql 中的時區感知日期問題

[英]timezone aware dates issue in django rest framework with postgresql

我正在使用 Django rest 框架和 Postgresql。 從 Django 文檔中,我了解到 Postgres 將僅以 UTC 存儲日期時間,Django 在模板中顯示時將其轉換回本地時間。 但是,我沒有使用模板。 我正在使用 DRF 創建 Vue 應用程序使用的 API。 我有兩個問題——

  1. 如果值始終以 UTC 存儲,為什么 Django Model 日期時間字段會轉換為“帶時區的時間戳”類型列?
  2. 如何從 Django rest 框架返回本地時間的 DateTime 值。

這是我的設置文件 -

TIME_ZONE = 'Asia/Calcutta'

USE_TZ = True

REST_FRAMEWORK = {
    'DATE_INPUT_FORMATS': ["%d-%m-%Y",],
    'DATE_FORMAT': "%d-%m-%Y",
    'DATETIME_FORMAT': "%d-%m-%Y %H:%M:%S",
}

特別注意 - 使用 django.utils.timezone.localtime(timezone.now()) 會在本地時間創建一個值,但在存儲在數據庫中時會轉換回 UTC。

任何幫助將不勝感激。 非常感謝您的時間和幫助。

要回答您的兩個問題:

  1. 這是 TZ 感知時間戳的標准方法。 文檔

    如果您的用戶居住在多個時區並且您希望根據每個用戶的掛鍾顯示日期時間信息,這將非常方便。

    如果存儲為 UTC,如果我們有用戶的時區(或默認的TIME_ZONE值),時間戳可以轉換為任何本地時間表示。

  2. Django Rest 框架將使用為應用程序定義的設置。 DateTimeField state 的文檔

    default_timezone - 代表時區的 pytz.timezone。 如果未指定並且啟用了 USE_TZ 設置,則默認為當前時區。 如果 USE_TZ 被禁用,那么 datetime 對象將是幼稚的。

暫無
暫無

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

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