亚洲在线久爱草,狠狠天天香蕉网,天天搞日日干久草,伊人亚洲日本欧美

為了賬號安全,請及時綁定郵箱和手機立即綁定
已解決430363個問題,去搜搜看,總會有你想問的

模塊 pytz:UTC 減少而不是增加

模塊 pytz:UTC 減少而不是增加

墨色風雨 2021-11-23 16:42:51
我想將我所在國家/地區的 UTC 時間轉換為 UTC(西班牙)。我正在使用模塊 pytz 進行轉換,但我得到的結果是 UTC-1 而不是 UTC+1。這是我的代碼:import datetimeimport pytzmadrid = pytz.timezone("Europe/Madrid")UTC_time = datetime.datetime.strptime("2019-03-01 14:45","%Y-%m-%d %H:%M")madrid_dt = madrid.localize(UTC_time, is_dst=None)MadridTime = madrid_dt.astimezone(pytz.utc).strftime ("%Y-%m-%d %H:%M")這是輸出:UTC_Time: 2019-03-01 14:45:00MadridTime: 2019-03-01 13:45我需要馬德里時間返回 15:45 而不是 13:45。我究竟做錯了什么?EDITED2:在您的幫助下,我發現我混淆了 localize 和 astimeszone 的使用?,F在我面臨兩個新問題。這是新代碼:import datetimeimport pytzdt = datetime.datetime.strptime('2019-03-01 14:45','%Y-%m-%d %H:%M')madrid_tz = pytz.timezone('Europe/Madrid')madrid = dt.astimezone(madrid_tz)print(madrid)# 2019-03-01 14:45:00+01:00print(madrid.strftime ("%Y-%m-%d %H:%M"))# 2019-03-01 14:45問題 1:在 Windows 10、Python3 中運行此代碼,我預期的輸出2019-03-01 15:45:00不是2019-03-01 14:45:00+01:00. 我試圖格式化它,strftime ("%Y-%m-%d %H:%M")但這并沒有成功。問題 2:在 Raspberrypi(這是我將在完成后運行代碼的地方)中運行此代碼,Python3,我在這一行中收到一個 ValueError madrid = dt.astimezone(madrid_tz)。錯誤是ValueError: astimezone() cannot be applied to a naive datetime有任何想法嗎?
查看完整描述

2 回答

?
蝴蝶刀刀

TA貢獻1801條經驗 獲得超8個贊

讓我們更清楚地說明這里的內容:

madrid = pytz.timezone('Europe/Madrid')

歐洲/馬德里時區,即 UTC+1/+2。

naive_ts = datetime.strptime('2019-03-01 14:45', '%Y-%m-%d %H:%M')

沒有任何特定時區的樸素時間戳。

madrid_ts = madrid.localize(naive_ts)

相同的時間戳,現在附加時區 Europe/Madrid,即馬德里的 14:45 (UTC+1)

utc_ts = madrid_ts.astimezone(pytz.utc)

UTC 中馬德里的 14:45 (UTC+1) 相同,因此,14:45 - 1 小時 → 13:45。一切都在預料之中。如果在馬德里是 14:45,那么在 UTC 是 13:45,因為馬德里比 UTC 早一小時。

datetime.now()

不管是什么……它與上述兩個時間戳中的任何一個都無關,并且取決于您機器的默認時區以及您執行此代碼時的當前時間。


查看完整回答
反對 回復 2021-11-23
?
繁星淼淼

TA貢獻1775條經驗 獲得超11個贊

我想你是誤會localize和astimezone,因為你是創建2019年3月1日14:45在與歐洲/馬德里時區的datetime對象localize,然后將其轉換為UTC與astimezone它給你意想不到的結果。


相反,您似乎打算為 2019-03-01 14:45 創建一個日期時間對象,然后您想以歐洲/馬德里時間和 UTC 時間顯示該日期時間。您可以使用astimezone或localize來獲得所需的結果。


astimezone 例子:


import datetime

import pytz


dt = datetime.datetime.strptime('2019-03-01 14:45','%Y-%m-%d %H:%M')


madrid_tz = pytz.timezone('Europe/Madrid')

madrid = dt.astimezone(madrid_tz)

print(madrid)

# 2019-03-01 15:45:00+01:00


utc = dt.astimezone(pytz.utc)

print(utc)

# 2019-03-01 14:45:00+00:00

localize 示例(請注意,日期時間對象是在對應于每個時區的時間創建的,因此兩者將代表相同的時間點):


import datetime

import pytz


madrid_tz = pytz.timezone('Europe/Madrid')

madrid = madrid_tz.localize(datetime.datetime(2019, 3, 1, 15, 45))

print(madrid)

# 2019-03-01 15:45:00+01:00


utc = pytz.utc.localize(datetime.datetime(2019, 3, 1, 14, 45))

print(utc)

# 2019-03-01 14:45:00+00:00


查看完整回答
反對 回復 2021-11-23
  • 2 回答
  • 0 關注
  • 217 瀏覽
慕課專欄
更多

添加回答

舉報

0/150
提交
取消
微信客服

購課補貼
聯系客服咨詢優惠詳情

幫助反饋 APP下載

慕課網APP
您的移動學習伙伴

公眾號

掃描二維碼
關注慕課網微信公眾號