Рубрики
Без рубрики

Преобразовать дату и время в дату, но часовой пояс отсутствует?

Преобразовать дату и время в дату, но часовой пояс отсутствует?

Фрагмент кода для использования Joda Time для преобразования java.util. Дата в другой часовой пояс:

//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???

Проблема в том, что если вы конвертируете обратно Joda Дата и время в java.util. Дата , часовой пояс вернется к системному часовому поясу по умолчанию!?

Решение

В Java, java.util. Дата не знает о часовом поясе, если/|java.util. Дата печатается с помощью toString(), она всегда будет печатать дату с системным часовым поясом по умолчанию.

Чтобы исправить это, преобразуйте дату и время в Joda LocalDateTime первый.

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!

Оригинал: “https://mkyong.com/java/convert-datetime-to-date-but-timezone-is-missing/”