2017-04-03 16 views
0

我對GWT有點新鮮。GWT無法像BST ans EDT那樣解析時區

我一直試圖解析格式爲「dd-MMM-yyyy HH:mm z」的日期,但當時區爲EDT或BST時,我得到一個異常。

GWT在解析時不支持這些時區嗎?如果是這樣,是否有其他方法可以用來解析使用EDT的日期?

請幫忙。

代碼片段:

DateTimeFormat dateParser = DateTimeFormat.getFormat("dd-MMM-yyyy HH:mm z"); 
String fomattedDate = dateParser.format(date,Timezone.createTimeZone(TimeZoneConstants.americaNewYork)); 
Date newDate = dateTimeParser.parse(formattedDate); 

此行給我的異常。

在閱讀DateTimeFormat的文檔後,它表示它在解析時支持更少的時區。

+1

你能分享你使用的代碼嗎?你有沒有檢查你所做的調用是否將這些時區傳遞給瀏覽器,並且它是JS(而不是GWT框架),它不能解析它們? –

+0

嗨科林我附上了代碼片段。請看看並分享您的意見。 – Prakhar

+0

如果將格式更改爲'dd-MMM-yyyy HH:mm Z' - 大寫'Z'作爲時區,則它可以工作。 – Adam

回答

2

此代碼的工作對我來說:

TimeZoneConstants timeZoneConstants = GWT.create(TimeZoneConstants.class); 
DateTimeFormat dateParser = DateTimeFormat.getFormat("dd-MMM-yyyy HH:mm Z"); 
String formattedDate = dateParser.format(date, TimeZone.createTimeZone(timeZoneConstants.americaNewYork())); 
Date newDate = dateParser.parse(formattedDate); 

我創建TimeZoneConstants通過延遲綁定,改變了格式dd-MMM-yyyy HH:mm Z(資本Z) - 與z我也得到了一個IllegalArgumentException確實如此。

如果仍然出現問題,請嘗試深入分析函數以追蹤確切的問題。

+0

謝謝Adam。這裏還有一個問題,當我將解析後的值放入一個java.util.Date對象時,它再次將格式化的日期轉換爲GMT時區。我怎樣才能將它保存在EDT時區並放入日期對象?實際上,我需要在解析後的對象中設置值。 – Prakhar

+0

恐怕在GWT中幾乎不可能,因爲java.util.Date始終是瀏覽器的時區。檢查[GWT中的客戶端時區支持](http://stackoverflow.com/questions/1686448/client-side-time-zone-support-in-gwt)問題,或者提出另一個問題。我很高興我可以幫助解析。 – Adam