我有一個自定義的GWT日期時間部件,它是兩個文本框的組合,一個用於保存日期,一個用於保存時間。當我輸入日期04/09/1956 12:00 AM(在Date窗口小部件中)時,在我的窗口小部件的ValueChangeHandler的內部,我通過GWT的DateTimeFormat類的format()方法運行它,它接收日期和時區信息並給我一個格式化的日期字符串,用戶友好的時候顯示,然後根據該小部件中的日期,我設置時間部分的時間。GWT日期格式
問題是,當我把日期不太老(我的觀察日期不比1981年的日期更早),似乎沒有任何問題。當我在我的情況下輸入比1956更早的日期時,會出現一些奇怪的夏令時邏輯,通過調整我的字符串格式,將其調整回1小時,並給我04/08/1956 11:00 PM而不是04/09/1956 12:00 AM。儘管日期對象仍然表示我期望的日期,但格式化的字符串會與不同的日期表示混淆。
這是隻有在生產模式下運行應用程序時纔可重現的問題。當我在託管模式下在本地機器上運行它時,我根本沒有看到這個問題。這是最糟糕的部分。
據我所知,當我們以生產模式運行時,GWT從一個名爲noCache.js的javascript文件讀取數據,而不是託管模式下的Web-INF/lib文件夾。
另外,我通過GWT的格式化程序在幾個其他地方運行java.util.Date對象,但我從來沒有遇到過這個問題.....當它在ValueChangeHandler中運行時會出現這種情況。
以前有沒有人遇到過這種奇怪的行爲?
好的。下面是示例代碼:
Date date = new Date();
date.setYear(1956 - 1900);
date.setMonth(3);
date.setDate(9);
date.setHours(0);
date.setMinutes(0);
date.setSeconds(0);
// date here is 04/09/1956 12:00 AM
DateTimeFormat dateTimeFormat = new DateTimeFormat(somePattern); //pattern is a string //which represents which pattern you want to use
String formattedDateString = dateTimeFormat.format(date, timeZone); // timeZone is an //instance of com.google.gwt.i18n.client.TimeZone
// formattedDateString is 04/8/1956 11:00 PM. The time got pushed back by one hour.
有趣。請發佈相關的代碼和輸出以獲得幫助。 – 2011-12-20 23:48:11
我更新了一些示例代碼的問題..感謝您考慮這一點。 – Karthik 2011-12-21 20:52:33
這可能是一個微軟Windows的問題。有些PC需要刷新其更新序列或重新安裝新操作系統,並重新更新其更新。您是否在XP系統上運行生產模式?你有沒有嘗試過其他各種操作系統? Mac,Linux,Win 7? – 2011-12-23 02:49:38