GWT форматирование даты - PullRequest
       14

GWT форматирование даты

2 голосов
/ 21 декабря 2011

У меня есть настраиваемый виджет 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.

1 Ответ

1 голос
/ 25 декабря 2011

Windows suport Переход на летнее и зимнее время 1987 . Вот почему любая дата до этого года не отображается правильно. проверьте это в Википедии

...