У меня есть настраиваемый виджет GWT Date -Time, который представляет собой комбинацию из двух текстовых полей, одно для хранения даты и одно для хранения времени. Когда я вписываю дату 09.09.1956 в 12:00 (в виджет «Дата»), внутренне в ValueChangeHandler для своего виджета я запускаю ее через метод format () класса GWT DateTimeFormat, который принимает информацию о дате и часовом поясе. и дает мне отформатированную строку даты, которая удобна для пользователя при отображении, а затем, основываясь на дате в этом виджете, я устанавливаю время в ее части времени.
Проблема в том, что, когда я ставлю даты, которые не слишком стары (мои наблюдения были датами не старше, чем в 1981 году), кажется, нет никаких проблем вообще. Когда я вставляю даты старше, чем, например, 1956, в моем случае, есть какая-то странная логика перехода на летнее время, которая портит мой формат моей строки, корректируя ее обратно на 1 час и давая мне 08.04.1956 11:00 вечера вместо 04 09.09.1956 12:00. Несмотря на то, что объект date все еще представляет дату, которую я намеревался, отформатированная строка испорчена с другим представлением даты.
Эта проблема воспроизводима только при запуске приложения в производственном режиме. Когда я запускаю его локально на своей машине в режиме хостинга, я вообще не вижу этой проблемы. Это худшая часть.
Я понимаю, что GWT читает из файла javascript noCache.js, когда мы работаем в рабочем режиме, а не в папке Web-INF / lib в размещенном режиме.
Кроме того, я запускаю объект java.util.Date через форматтер GWT в нескольких других местах, где у меня есть дата под рукой, но никогда не возникает эта проблема ..... Это происходит, когда я запускаю ее в ValueChangeHandler.
Кто-нибудь сталкивался с таким странным поведением раньше?
OK. Вот пример кода:
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.