我從Python程序中的Web服務檢索unix時間戳。此時間戳在美國時區。爲了在法國本地化其他對象中將其插入MySQL數據庫,我想將此時間戳轉換爲法國時區。將unix時間戳更改爲不同的時區
我可以用數學函數做到這一點,但存在夏令時問題。我寧願使用Python時間和日期特定的函數來處理這些概念。
您有提示,我迷失在Python文檔中嗎?
我從Python程序中的Web服務檢索unix時間戳。此時間戳在美國時區。爲了在法國本地化其他對象中將其插入MySQL數據庫,我想將此時間戳轉換爲法國時區。將unix時間戳更改爲不同的時區
我可以用數學函數做到這一點,但存在夏令時問題。我寧願使用Python時間和日期特定的函數來處理這些概念。
您有提示,我迷失在Python文檔中嗎?
過去,當我們從服務提供商處下載的文件的時間戳具有與PST時區對應的時間戳時,我遇到了類似的問題。下面幫我做了一下轉換:
import pytz, datetime, time
import os
originalTimeStamp = os.stat("/tmp/file-from-us-west-coast").st_mtime
# prints e.g. 2010-03-31 13:01:18
print "original:",datetime.datetime.fromtimestamp(originalTimeStamp)
# re-interpret
originalTimeZone = "America/Los_Angeles"
targetTimeZone = "Europe/Paris"
newTimeStamp = pytz.timezone(originalTimeZone).localize(datetime.datetime.fromtimestamp(originalTimeStamp)).astimezone(pytz.timezone(targetTimeZone))
# prints e.g. 2010-03-31 22:01:18+02:00
print "new: ",newTimeStamp
# convert back to seconds since epoch
newTimeStamp = time.mktime(newTimeStamp.timetuple())
# print time difference in hours
print (newTimeStamp - originalTimeStamp)/3600.0
即使我的問題被錯誤地解釋了(我沒有找到確切的問題),你解決了它:) – iwalktheline
如果你可以測試任意日期,作爲一個終極測試,我會建議測試發生了什麼2011年11月3日。歐洲將有冬令時,而美國仍有夏令時(見http://www.worldtimezone.com/daylight.html) –
如果它確實是一個unix時間戳,那麼它是基於UTC的。只是爲你的用例正確解釋它。僅在必須以文本形式打印此日期時應用時區翻譯。
如果您也將它作爲時間戳存儲在您身邊,請保持原樣。
這不是一個「unix時間戳」,而是根據最初的太平洋時區1970年1月1日過去的秒數。這很醜陋,我知道,但它是Facebook API。我不能保留它,因爲我有其他基於真正的「unix時間戳」的對象:UTC – iwalktheline
如果你知道它是太平洋時間,而不是變化,你可以添加8小時使其成爲UTC,並用作unix時間戳。 – viraptor
事實上Facebook的api並沒有考慮到法國的夏季是GMT + 2,春季是GMT + 1。所有數據均作爲填充日期存儲在數據庫中,但在太平洋標準時區中。例如,我在facebook網站上創建一個事件2011-07-15 23:00。它存儲爲2011-07-15 23:00-0000(PST)。所有的問題都來自這裏。 pytz解決了這個問題 – iwalktheline
pytz可能會幫助你在這裏。就像viraptor說的,理想情況下,你會將所有的日期時間存儲爲unix UTC時間戳,並且只將本地化時打印出來。
零對應什麼? 00:00:00 1970年1月1日PST或01:00:00 1970年1月1日PST? –
好問題,我頭撞牆3小時...事實上,它接縫,它不是PST,但PDT。我有一個額外的時間(這導致我-7h,而不是 - 8H),但在法國,我們在夏季UTC + 2H和冬季+ 1H。我無法用數學函數弄清楚它。我可能需要pytz – iwalktheline
我的問題是不準確的,我錯過了問題的根源。我打開另一個線程 – iwalktheline