2015-11-30 5 views
0

У меня есть этот простой код:Joda время получать правильное время от DATETIME

DateTimeFormatter formatter = DateTimeFormat.forPattern("HH:mm yyyy-MM-dd"); 

    DateTime dateTime = formatter.withZone(DateTimeZone.forID("America/New_York")).parseDateTime("08:30 2015-06-01"); 
    DateTime dateTime2 = formatter.withZone(DateTimeZone.forID("America/New_York")).parseDateTime("08:30 2015-12-01"); 

эти времена високосными. когда я ударил метод ToString, я получил что-то вроде этого:

2015-06-01T08:30:00.000-04:00 
2015-12-01T08:30:00.000-05:00 

, который является правильным, мы можем видеть UTC время - смещение. Но когда я называю getHourOfDay, я получил 8, а не 4/3, как ожидалось. Что я делаю не так? Пожалуйста, поделитесь некоторыми советами здесь.

ответ

1

Ну, с Javadoc для DateTimeFormatter#withZone():

Возвращает новый форматчик, который будет использовать указанную зону в предпочтении к зоне печатного объекта или зоны по умолчанию на разборе.

Итак, вы сказали, что форматтер использует конкретный часовой пояс для разбора И вывода, а введенный вами вход НЕ содержит часовой пояс, поэтому это ожидаемый результат. В сущности, вы сказали:

  1. Вот строка даты без часового пояса, синтаксического анализа при условии, Америка/New_York
  2. Преобразование даты обратно в строку, в часовом поясе Америки/New_York

Это то, что это сделал.

+0

это замечательно. поэтому, учитывая, что у меня есть время UTC, и мне нужно время ET (new york), мне нужно разобрать его без какой-либо зоны, а затем напечатать его следующим образом: System.out.println (dateTime.withZone (DateTimeZone.forID («America/New_York») «)) getHourOfDay()). ? –

+0

Если вход UTC, строка должна содержать часовой пояс, или вы должны указывать системе UTC явно. –

+0

работает, спасибо за помощь :) –

Смежные вопросы