java - GWT 日期格式

标签 java javascript gwt datetime production-environment

我有一个自定义的 GWT Date -Time 小部件,它是两个文本框的组合,一个用于保存日期,一个用于保存时间。当我输入日期 04/09/1956 12:00 AM(在日期小部件中)时,在我的小部件的 ValueChangeHandler 内部,我通过 GWT 的 DateTimeFormat 类的 format() 方法运行它,该方法接收日期和时区信息并给我一个格式化的日期字符串,在显示时用户友好,然后根据该小部件中的日期,我在它的时间部分设置时间。

问题是当我输入不太早的日期(我的观察是不早于 1981 年的日期)时,似乎完全没有问题。当我输入早于 1956 年的日期时,有一些奇怪的夏令时逻辑通过将字符串向后调整 1 小时来弄乱我的字符串格式,并给我 04/08/1956 11:00 PM 而不是 04/09/1956 凌晨 12:00。尽管日期对象仍然表示我想要的日期,但格式化的字符串被不同的日期表示搞乱了。

只有当我在生产模式下运行应用程序时,这个问题才会重现。当我以托管模式在我的机器上本地运行它时,我根本看不到这个问题。这是最糟糕的部分。

我知道当我们在生产模式下运行时,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.

最佳答案

Windows1987 开始支持夏令时。这就是无法正确显示该年之前的任何日期的原因。查看 Wikipedia

关于java - GWT 日期格式,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/8582760/

相关文章:

java - 无法弄清楚为什么我的选择排序作为 java 方法的实现不能按预期工作

java - ClassLoader 似乎没有正确返回对象

java - 如何以编程方式停止 RMI 服务器并通知所有客户端

javascript - 如何将数组项 --> 转换为单独的对象 --> 并将它们放入数组中?

java - 为什么建议列表在 GWT 中仍然可见

javascript - 在 Eclipse 中访问 GWT 生成的 javascript 源

java - 如何使用 Http 而不是默认的 gRPC 进行 Google 监控 API

javascript - 如何使用 console.log (Javascript) 打印函数的输出

javascript - Node.js xml2js - 创建站点地图属性时被忽略

session - Tomcat 7 上的 GWT 显示单个 session