Часовые пояса в Java / (Клиентский) GWT

[Клиентский класс GWT]

У меня есть Объект Даты...

Date dataObject = DateTimeFormat.getFormat("yyyy-MM-dd'T'HH:mm:ss.SSS")
                      .parse("2009-10-12T00:00:00.000);

Это хорошо работает. Однако, когда я делаю a:

dateObject.getTime();

Это возвращает Время UNIX миллисекунды с помощью GMT с переходом на летнее время, поэтому делая это Временем UNIX, которое я не могу использовать. Мне нужен он в UTC. Как я делаю это?


В настоящее время я анализирую дату, и она отдает меня:

'Thu Apr 16 08:46:20 GMT+100 2009' @ '1239867980191'

Однако дата, в которой я являюсь передающим, составляет 1 час меньше, чем это время (7:46 и не 8:46!).

Как я передаю в факте, это - UTC? Или если бы это не может использовать UTC (который был бы смешон), как я использую GMT без перехода на летнее время?

8
задан Federer 28 January 2010 в 16:12
поделиться

5 ответов

Ваш последний редактор делает вещи более четкими.

В основном вы смущены, и вы уже получаете то, что хотите.

128] 1239867980191 Миллисекунды, поскольку эпоха переводится в четверг, 16 апреля 2009 года, в 7: 46: 20.191 в часовом поясе GMT. Очень же момент переводит в тот же день, но 8: 46: 20.191 в часовом поясе GMT ​​+ 01. Если ваша входная строка указана «7: 46: 20.191», а вы действительно получили 1239867980191 из Date.getTime () , затем поздравляем, код анализа понимал ваш «7: 46: 20.191», что следует интерпретировать в Часовой пояс GMT и сделал это правильно.

Если после этого Вы получаете «8:46:20» при печати, это только потому, что вы используете часовой пояс GMT + 01 для отображения этого мгновенного. Обратите внимание, что строка содержит GMT + 100 именно для уведомления вас о том, что он использует этот часовой пояс для целей отображения. Мгновенное действие , какую дату представляется экземпляр , тем не менее, точно то, что вы хотите, чтобы он был содержать. Помните, что экземпляр экземпляр представляет собой мгновение во времени, для которых не применяется понятие часового пояса: часовые пояса используются для преобразования моментов в элементы календаря (дни, часы ...) и обратно.

Чтобы преобразовать дату в отображаемой строке, используйте DateTimeFormat.Format (дата, часовой пояс) , которая позволяет указать, какой часовой пояс вы хотите использовать для этой строки.

5
ответ дан 5 December 2019 в 23:15
поделиться

Я продолжаю видеть форматы с предложенным ZZZZ... но почему?

"yyyy-MM-dd'T'HH:mm:s.SSSZ" будет соответствовать

"2009-10-12T00:00:00.000-0000"

Последняя часть - смещение от UTC; Калифорния (чтобы использовать чужое примерное время) будет -0800, -0700 в летнее время.

В качестве примечания, GMT также всегда будет -0000. Поэтому летний часовой пояс Великобритании - BST (Британское летнее время, +0100).

0
ответ дан 5 December 2019 в 23:15
поделиться

Это наоборот. Дата Экземпляр Удерживает время в миллисекундах с момента эпохи, используя масштаб времени UTC (I.E. Screen Secten, игнорируются). Это то, что дата даты адресаты () возврат, и это то, что вы хотите.

Винприт здесь - парсер, который интерпретирует дату, которую вы даете в виде строки в вашем местном часовом поясе. Если вы хотите DateTimeFormat для интерпретации строки в виде даты и времени, приведенного в часовой поясе UTC, добавьте явный часовой пояс в анализируемую строку:

DateTimeFormat.getFormat("yyyy-MM-dd'T'HH:mm:ssZZZZ")
    .parse("2009-10-12T00:00:00.000" + " GMT");

(вышеупомянутая, если я понял документацию GWT Правильно; я не пробовал.)

Просто чтобы быть понятным в моих обозначениях: для всех практических целей нет разницы между «GMT» и «UTC», и в часовом поясе нет ожиданий. Другие часовые пояса часто определяются как «GMT Plus или минус некоторые смещения», а смещение может измениться между летним и зимним. Например, часовой пояс в Нью-Йорке несколько эквивалентен «GMT-04» летом и «GMT-05» зимой.

1
ответ дан 5 December 2019 в 23:15
поделиться

Попробуйте объект Calendar .

Calendar cal = Calendar.getInstance(TimeZone.getTimeZone("UTC"));
Date dataObject = DateTimeFormat.getFormat("yyyy-MM-dd'T'HH:mm:ss.SSS")
                  .parse("2009-10-12T00:00:00.000);
cal.setTime(dataObject);
cal.getTimeInMillis();

Согласно API, GetTimeInmillis () возвращает «текущее время как UTC Milliseconds из эпохи».

Редактировать : Как указал _bravado, API календаря в настоящее время недоступен для GWT ( Выпуск 603 ). Хотя это получит подходящее время в приложении Java, оно не будет работать здесь. Есть информация в группе об использовании GMT.

Редактировать : отсутствует закрывающий кронштейн на Calendar.getInstance () Call

-4
ответ дан 5 December 2019 в 23:15
поделиться

Так как класс Calendar не поддерживается в GWT, может быть, что-то взлома, как это будет работать:

final String timezone = "GMT-07:00";
DateTimeFormat dtf = DateTimeFormat.getFormat("yyyy-MM-dd'T'HH:mm:ssZZZZ");
long unix = dtf.parse("2009-10-12T00:00:00" + timezone).getTime();

Таким образом, вы можете предоставить правильную информацию о часовой поясе - хотя это должно быть поведение по умолчанию.

3
ответ дан 5 December 2019 в 23:15
поделиться
Другие вопросы по тегам:

Похожие вопросы: