2011-03-03 36 views
4

我正在使用Google App Engine和python。我無法安裝第三方庫。在Python中使用時區獲取當前時間?

我雖然這應該工作,但它實際上運行沒有錯誤,但它返回當前時間時區不適用。

我做錯了什麼?

from datetime import tzinfo, timedelta, datetime 

class Seoul_tzinfo(tzinfo): 
    def utcoffset(self, dt): 
     return timedelta(hours=9) 
    def dst(self, dt): 
     return timedelta(0) 

greeting.date = datetime.now(Seoul_tzinfo()) 
+0

你的意思是 「無時區?」。如果只是名稱,請嘗試定義一個tzname方法。 – 2011-03-03 13:03:55

+0

@Thomas,我的意思是我得到當前時間GMT + 9不適用。 – SeniorLee 2011-03-03 13:22:16

+0

您可以在谷歌應用程序引擎上安裝第三方庫...但是,我說不知道pytz或dateutil(這是你需要什麼)的工作。 – 2011-03-04 10:01:10

回答

3

你在說什麼時候從數據庫中獲取實體?如果是這樣,appengine以UTC存儲所有dt屬性;當你把(),它只是丟棄tz信息。最明智的做法是將dt轉換爲UTC(使用astimezone()),並在從數據存儲中獲取時轉換回來。

(見http://code.google.com/appengine/docs/python/datastore/typesandpropertyclasses.html#DateTimeProperty

+0

我想這就是它!我已經多次閱讀文檔,但我錯過了一行。我一直試圖將本地時間保存到數據庫,並在獲取數據後立即顯示值。我會在取數據後嘗試改變時間。謝謝! – SeniorLee 2011-03-04 10:22:49

3

您需要實施一個tzinfo類與所有適當的方法來做你想做的事情。

documentationtzinfo是一個抽象類,如果用datetime對象使用需要作出一個具體的類與適當的方法。

具體來看看這個從文檔:

class FixedOffset(tzinfo): 
    """Fixed offset in minutes east from UTC.""" 

    def __init__(self, offset, name): 
     self.__offset = timedelta(minutes = offset) 
     self.__name = name 

    def utcoffset(self, dt): 
     return self.__offset 

    def tzname(self, dt): 
     return self.__name 

    def dst(self, dt): 
     return ZERO
+0

我不認爲__init__&tzname方法是純粹的方法。意味着這些方法沒有必要實施。像@ qor72一樣,我的示例代碼工作正常。感謝您的建議,但。 – SeniorLee 2011-03-04 10:19:19

1

我運行的Python 2.6.5和你的代碼似乎正常工作。我調整它來輸出我的本地時間和你的時間調整;

$ python test.py 
Local: 2011-03-03 08:53:43.514784 
Adj: 2011-03-03 22:53:43.514784+09:00 

你確定這不是你的問候類嗎?

+0

謝謝。我只是python的新手。這真的有助於縮小我的問題! – SeniorLee 2011-03-04 10:20:19