簡體   English   中英

Python Django 將時間戳從 UTC 轉換為本地時區

[英]Python Django convert timestamp from UTC to local timezone

我正在使用 Django + DRF 開發 REST API。 我已將 django 設置配置為使用時區支持:

USE_I18N = True
USE_L10N = True
USE_TZ = True

如前所述,我的數據庫以 UTC 格式接收和存儲數據。 我的問題是,對於某些用戶(每個用戶都有他們的配置),我必須在他們的時區(通常在 UTC-3 或 UTC-2)中返回響應。 我正在閱讀幾篇文章並嘗試了幾種組合: astimezonenormalize沒有成功。 我附上我的嘗試:

timezone_arg = pytz.timezone('America/Buenos_Aires')
print(ts_a, ts_b)
ts_a = ts_a.astimezone(timezone_arg) 
ts_b = ts_b.astimezone(timezone_arg) 
print(ts_a, ts_b)

utc = pytz.timezone('UTC')
ts_a = timezone_arg.normalize(ts_a.astimezone(utc))
ts_b = timezone_arg.normalize(ts_b.astimezone(utc))
print(ts_a, ts_b)

我得到以下信息:

2022-06-17 05:39:09 2022-06-17 05:46:49
2022-06-17 05:39:09-03:00 2022-06-17 05:46:49-03:00
2022-06-17 05:39:09-03:00 2022-06-17 05:46:49-03:00

我知道 django 正在解釋我所說的是時間戳已經在 UTC-3 中......並且它正在將它們標准化為 UTC。 但我想要的是從 UTC 轉換為 UTC-3。 我的輸入/輸出應該是:

2022-06-17 05:39:09 2022-06-17 05:46:49
2022-06-17 02:39:09 2022-06-17 02:46:49

由於我不僅使用阿根廷的時區 (UTC-3),我無法計算 3 小時的時間增量。其他客戶的差異可能會有所不同。 我的最后一個資源是在標准化時間戳的末尾使用 -03:00:00 並進行減法。 但是我想知道有沒有更直接更正確的方式。這些時間戳是直接發給用戶的,一定要便於閱讀。

它會是這樣的:

from datetime import datetime
from dateutil import tz

from_zone = tz.tzutc()
to_zone = tz.tzlocal()

utc = datetime.strptime('2022-06-17 05:39:09', '%Y-%m-%d %H:%M:%S')

utc = utc.replace(tzinfo=from_zone)

# Convert to local time zone
to_local_time = utc.astimezone(to_zone)

print(utc,to_local_time)

暫無
暫無

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

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