Конвертировать DateTime в Date, но TimeZone отсутствует?
Фрагмент кода для использованияJoda Time для преобразованияjava.util.Date в другой часовой пояс:
//java.util.Date : 22-1-2015 10:15:55 AM
//System TimeZone : Asia/Singapore
//Convert java.util.Date to America/New_York TimeZone
DateTime dt = new DateTime(date);
DateTimeZone dtZone = DateTimeZone.forID("America/New_York");
DateTime dtus = dt.withZone(dtZone); //21-1-2015 09:15:55 PM - Correct!
//Convert Joda DateTime back to java.util.Date, and print it out
Date dateInUS = dtus.toDate();
System.out.println(dateInUS); //22-1-2015 10:15:55 AM - What???Why???
Проблема в том, что если вы обратно конвертируете JodaDateTime вjava.util.Date, часовой пояс вернется к системному часовому поясу по умолчанию !?
Решение
В Javajava.util.Date не знает о часовом поясе. Еслиjava.util.Date печатается с помощью toString (), он всегда будет печатать дату с системным часовым поясом по умолчанию.
Чтобы исправить это, сначала конвертируйте DateTime в JodaLocalDateTime.
DateTime dt = new DateTime(date);
DateTimeZone dtZone = DateTimeZone.forID("America/New_York");
DateTime dtus = dt.withZone(dtZone); //21-1-2015 09:15:55 PM - Correct!
Date dateInUS = dtus.toLocalDateTime().toDate();
System.out.println(dateInUS); //21-1-2015 09:15:55 PM - Correct!