我有一个定制的GWT小部件,它是两个文本框的组合,一个用来保存日期,另一个用来保存时间。当我输入日期04/09/1956 12:00 AM (在date小部件中)时,在我的小部件内部的ValueChangeHandler中,我通过GWT的DateTimeFormat类的format()方法运行它,该方法接收日期和时区信息,并给我一个格式化的日期字符串,在显示时是用户友好的,然后根据该小部件中的日期设置时间。
问题是,当我把日期放得不太老(我观察到的日期不比1981年的日期大)时,似乎一点问题也没有。在我的例子中,当我输入比1956年更早的日期时,会出现一些奇怪的夏令储蓄逻辑,它把字符串的格式调整了1小时,给了我04/08/1956 11:00的下午11:00,而不是04/09/1956 12:00。尽管date对象仍然表示我想要的日期,但格式化的字符串会被不同的日期表示形式混淆。
这是问题是重复性的,只有当我运行的应用程序在生产模式。当我在我的机器上以托管模式在本地运行它时,我根本没有看到这个问题。这是最糟糕的部分。
我了解到,当我们在生产模式下运行时,GWT从名为noCache.js的javascript文件中读取,而不是在托管模式下运行Web/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-25 02:03:18
支持1987的夏令储蓄。这就是为什么该年之前的任何日期都没有正确显示的原因。在维基百科查一查
https://stackoverflow.com/questions/8582760
复制相似问题