2010-08-25 191 views
3

嘿,大家好!我有時區麻煩。Python unix時間戳轉換和時區

我的2010-07-26 23時35分03秒

時間戳我真正想要做的就是從那個時候減去15分鐘。

我的方法是將是一個簡單的轉換UNIX時間,減去秒,轉換回。簡單的權利?

我的問題是,蟒蛇使用我的本地時區,目前東部夏令時間,我相信調整返回的UNIX時間是北京時間。

所以,當我這樣做:

# packet[20] holds the time stamp 

unix_time_value = (mktime(packet[20].timetuple())) 

我得到1280201703這是星期二,2010年7月27日3時35分03秒。我可以這樣做:

unix_time_value = (mktime(packet[20].timetuple())) - (4 * 3600) 

,但現在我要檢查這是-5 GMT東部標準時間和調整(4 * 3600)至(5 * 3600)。有什麼辦法可以告訴python不要使用我的本地時區,只需要轉換darn時間戳,還是有一種簡單的方法來接收數據包[20]並減去15分鐘?

回答

6

datetime.timedelta(seconds=15*60)

6

online docs有一個方便的表格(你稱之爲「unix時間」更恰當地稱爲「UTC」,「通用時間座標」,並且「自時代以來的秒數」是作爲浮點數的「時間戳記」。 。):

使用下列功能時之間轉換 :

From      To       Use 

seconds since the epoch  struct_time in UTC   gmtime() 

seconds since the epoch  struct_time in local time localtime() 

struct_time in UTC   seconds since the epoch  calendar.timegm() 

struct_time in local time seconds since the epoch  mktime() 

其中不合格的函數名來自time模塊(因爲這其中的文檔是; - )。所以,既然你顯然有struct_time in UTC啓動,使用calendar.timegm()獲得時間戳(又名「自紀元秒」),減去15 * 60 = 900(因爲度量的單位是秒),並把產生的「秒從紀元」回一個struct_time in UTCtime.gmtime。或者,使用time.mktimetime.localtime如果你喜歡在本地時間的工作(但可能給問題,如果15分鐘就可以橫跨在切換到DST或背面的瞬間 - 總是UTC工作是發聲器)。

當然,要使用calendar.timegm,您需要在代碼中使用import calendar(導入通常最好放置在腳本或模塊的頂部)。

+0

很好的解釋。謝謝! – 2010-08-25 15:45:01