Во-первых, вы не должны использовать java.util.Date.toString()
(неявно используемый в вашем примере) для оценки результата. Причина заключается в том, что ее запутанное поведение всегда выводится в системном часовом поясе, а не в реальном состоянии вашего результата.
Во-вторых: если вы установили зону в UTC, вы даете команду вашему парсеру интерпретировать строку без полей «2012-04-01T00: 00: 00.000» в качестве UTC, а не как IST. Просто посмотрите на состояние вашего результата:
DateTimeFormatter COMBINED_FORMAT =
ISODateTimeFormat.dateTimeParser().withZone(DateTimeZone.UTC);
System.out.println(COMBINED_FORMAT.parseDateTime("2012-04-01T00:00:00.000"));
// 2012-04-01T00:00:00.000Z
Однако, если вы хотите, чтобы результат "Sun Apr 01 00:00:00 IST 2012" (выход Date.toString()) или эквивалент: " 2012-04-01T00: 00: 00 + 05: 30 ", тогда вы должны проинструктировать синтаксический анализатор для интерпретации ввода как IST, а не UTC.
Решение:
DateTimeFormatter COMBINED_FORMAT =
ISODateTimeFormat.dateTimeParser().withZone(DateTimeZone.forID("Asia/Kolkata"));
System.out.println(COMBINED_FORMAT.parseDateTime("2012-04-01T00:00:00.000"));
// 2012-04-01T00:00:00.000+05:30
Если вы ждете часовой пояс, чтобы быть IST почему вы используете UTC? Что произойдет, если вы используете часовой пояс IST? Если вы находитесь в часовом поясе IST, почему вы устанавливаете его вообще? –
Вы вызываете 'toDate()' в разобранном 'DateTime', который возвращает' java.util.Date'; когда вы печатаете это, он всегда печатается в вашем местном часовом поясе. Обратите внимание, что 'java.util.Date' не запоминает информацию о часовом поясе. – Jesper
"Стандартное время Индии (IST) на 5:30 часов больше, чем в скоординированном универсальном времени". от http://www.timeanddate.com/time/zones/ist. ;) – Ephi