2012-05-29 85 views
2

我得到一個偏移形成從以下行的pytz庫:如何在python中添加兩個偏移量?

offset = datetime.datetime.now(pytz.timezone(timezone)).strftime('%z') 

首先,我通過US/Easterntimezone可變 ,然後我通過Asia/Kolkatatimezone可變打印出以下值

local_utc = -0400 
user_utc = +0530 

得到這些值後,我把它從字符串轉換爲int,代碼如下:

local_utc = int(local_utc) 
user_urc = int(user_utc) 

除了這個我有一個timetuple也:

hour, minute,days = (timezone_tuple.tm_hour, timezone_tuple.tm_min, 
         timezone_tuple.tm_mday) 

我想要的local_utc and user_utc的差異添加到上面的元組如-0400:04如小時00爲分鐘。 例如:區別將爲:0930。而且09會加到timezone_tuple.tm_hour30會加到timezone_tuple.tm_min

我沒有發現任何情況。怎麼可能? 有沒有辦法與spilit方法

+3

心不是在時區9小時30分鐘後,不是1.5小時區別? – unutbu

+0

哦對不起!更新! –

+0

你是如何從pytz獲得偏移量的? 'local_utc'是一個字符串嗎?如果你告訴Python'local_utc = -0400',那麼'local_utc'被設置爲整數-256,因爲Python將以0開頭的數字解釋爲八進制數。 – unutbu

回答

1

您的帖子顯示如何找到local_utcuser_utc作爲整數。你可以採取差異local_utc-user_utc來確定相對偏移量。

但是,datetime,timepytz應該爲您提供操作時間所需的所有工具,而無需解析偏移量並「手動」執行此類計算。

例如,

import pytz 
import datetime as dt 
import time 

eastern = pytz.timezone('US/Eastern') 
kolkata = pytz.timezone('Asia/Kolkata') 

naive_timetuple = time.localtime(0) 
print(naive_timetuple) 
# time.struct_time(tm_year=1969, tm_mon=12, tm_mday=31, tm_hour=19, tm_min=0, tm_sec=0, tm_wday=2, tm_yday=365, tm_isdst=0) 

上面,我所限定的幼稚timetuple。下面,我就「本地化」,它以美國/東部時間 - 也就是說,使它成爲一個時區感知日期時間:

naive_datetime = dt.datetime(*naive_timetuple[:6]) 
print(naive_datetime) 
# 1969-12-31 19:00:00 

localized_datetime = eastern.localize(naive_datetime) 
print(localized_datetime) 
# 1969-12-31 19:00:00-05:00 

我們一個時區感知時間值轉換爲任何其他時區,使用astimezone方法:

kolkata_datetime = localized_datetime.astimezone(kolkata) 
print(kolkata_datetime) 
# 1970-01-01 05:30:00+05:30 

如果你需要一個時間值轉換回timetuple,使用timetuple方法:

kolkata_timetuple = kolkata_datetime.timetuple() 
print(kolkata_timetuple) 
# time.struct_time(tm_year=1970, tm_mon=1, tm_mday=1, tm_hour=5, tm_min=30, tm_sec=0, tm_wday=3, tm_yday=1, tm_isdst=0) 
+0

感謝您給予非常具體的解釋:) –