2012-11-07 40 views
4

我從GAE文檔中瞭解到生產服務器時區始終是UTC。在本地開發時,服務器時區設置爲CET。有沒有辦法強制本地開發服務器也運行UTC?Google應用引擎 - 本地開發服務器時區

開發服務器在Mac OS上運行。

感謝,

雨果

回答

4

突然發現答案。爲了設置服務器時區,只需進入Eclipse,「運行配置」,然後選擇「虛擬機參數」並添加以下「-Duser.timezone = UTC」。

這將在此情況下將服務器時區設置爲所需的值(UTC)。這非常方便,因爲Google App Engine生產將始終運行UTC,而開發服務器(至少在我的情況下)是使用本地時區運行的。最終結果是我在dev和prod之間有不同的行爲。

Hugues

+2

請提交一個錯誤 - 這是dev和prod環境之間的一個意想不到的區別。 –

+0

是的,我認爲這是意想不到的,因爲我一直髮現TZ的DEV服務器處理方式一直很糟糕。 GAE的最新版本(例如1.7.3)似乎總是使用本地TZ,而在它用於使用UTC之前,除非您點擊服務器的「重新啓動」按鈕。所以我總是被迫停止並重啓服務器。 – doright

2

那麼你可以使用此同時節省了時間價值,您的數據存儲轉換爲特定的時區。

DateFormat utcFormat = new SimpleDateFormat(patternString); 
    utcFormat.setTimeZone(TimeZone.getTimeZone("UTC")); 
    DateFormat indianFormat = new SimpleDateFormat(patternString); 
    utcFormat.setTimeZone(TimeZone.getTimeZone("Asia/Kolkata")); 
    Date timestamp = utcFormat.parse(inputString); 
    String output = indianFormat.format(timestamp); 
+0

謝謝Ankur。你是對的,這將改變時區,但僅限於當前查詢,我正在尋找一種方法將設置從服務器端更改爲全局設置。剛剛找到答案(見下文)。謝謝你的幫助 ! – Hugues

1

GAE devServer默認使用本地時區。

我用這個代碼用它強制UTC:

boolean isDevEnvironment = SystemProperty.environment.value() == SystemProperty.Environment.Value.Development; 

    if (isDevEnvironment) { 
     TimeZone.setDefault(DateTimeZone.UTC.toTimeZone()); 
     DateTimeZone.setDefault(DateTimeZone.UTC); 
    } 

你需要服務器啓動和初始化過程中運行一次,在非常。

相關問題