2014-04-09 24 views
0

我使用eclipse創建了一個簡單的GWT示例,我只向GreetingService添加了一個自動生成的方法。當url有gwt.codesvr時,GWT的行爲有所不同

Date greetServer2() ; 

它實現象下面這樣:

public Date greetServer2(){ 
    // TODO Auto-generated method stub 
    // 
    String s = "2014/04/08"; 
    DateFormat inputFormatter = new SimpleDateFormat("yyyy/MM/dd"); 
    Date date=null; 
    try { 
     date = inputFormatter.parse(s); 
    } catch (ParseException e) { 
     // TODO Auto-generated catch block 
     e.printStackTrace(); 
    } 
    return date; 
} 

在客戶端,我只是顯示在彈出日期:

  greetingService.greetServer2(new AsyncCallback<Date>() { 
       public void onFailure(Throwable caught) { 
        // Show the RPC error message to the user 
        ... 
       } 

       public void onSuccess(Date result) { 
        Window.alert(result.toString()); 
       } 
      }); 

我通過Eclipse運行它,Eclipse生成的URL是:

http://127.0.0.1:8888/HelloGWT.html?gwt.codesvr=127.0.0.1:9997 

彈出式贏陶氏表示,「週二4月8日00:00:00 CLST 2014」

但是,如果我沒有訪問參數gwt.codesvr:

http://127.0.0.1:8888/HelloGWT.html 

彈出窗口說:「週一年4月7 23:00:00 GMT- 400 2014「

我的GWT是2.5.1,我的JDK是1.7.0_25。

任何線索?

在此先感謝。

回答

1

其中一個結果來自Java代碼,另一個來自您的瀏覽器。區別在於時區。如果你想要一致的結果,你不應該使用date.toString(),但使用DateFormat顯示日期,並傳遞一個時區。

請記住,您的用戶可能處於不同的時區,並且他們都將根據其瀏覽器設置看到不同的「時間」(甚至是不同的日期,如您的示例中所示),除非您在你的代碼。

UPDATE:

有對付的時區不同的策略。例如,您可以將所有日期保存爲長值(date.getTime())以保持一致性。然後,使用DateFormat和時區顯示它。

如果您想確保您的日期恰好在您所選時區的午夜開始,請在保存或使用它之前進行調整。這是我如何做到這一點:

public static Long toMidnight(Long date, TimeZone timeZone) { 
    return date - date % (24 * 60 * 60 * 1000) + 
      timeZone.getOffset(new Date(date)) * 60 * 1000; 
} 
+0

嗨,客戶端(瀏覽器)和服務器都在同一檯筆記本電腦上。我使用的時區是(UTC-04:00聖地亞哥)。實際上,我編寫這個例子的原因是因爲我遇到了一些時區問題,我嘗試去調試它,但是在正常運行和調試模式下,gwt應用程序的行爲有所不同,這會導致很多混淆。 – morven

+0

然後使用DateFormat並傳遞時區。使用'date.toString()'不會幫助你找到問題 - 你有相同的日期,只是用Java和JavaScript顯示不同。 –

+0

感謝您的回覆,我用它來格式化日期:ateTimeFormat f = DateTimeFormat.getFormat(「yyyy.MM.dd G HH:mm:ss vvvv」); TimeZoneConstants t =(TimeZoneConstants)GWT.create(TimeZoneConstants.class); TimeZone tz = TimeZone.createTimeZone(t.americaSantiago()); Window.alert(f.format(result,tz));現在這兩種情況都會返回相同的日期字符串,但它是2014年4月7日23:00:00,如果我需要2014-04-08 00:00:00該怎麼辦? – morven

相關問題