Преобразовать строку с часовым поясом в ZoneId
На вход приходит строка в таком виде 20200220 080200 +0100, где +0100 часовой пояс. Я вытаскиваю с базы данных дату и сверяю ее с датой из строки. Есть идея привести дату из базы данных к такому же часовому поясу и сверить строки.
LocalDateTime dtm = LocalDateTime.now();
dtm.atZone(ZoneId.of(""));
Но ZoneId.of("") принимает часовой пояс в другом формате.К примеру ZoneId.of("Asia/Singapore")
Ответы (1 шт):
Автор решения: Russtam
→ Ссылка
Вам надо смотреть в сторону ZoneOffset, а еще лучше просто преобразовать в OffsetDateTime, потом привести к одинаковому смещению времени и сравнить.
DateTimeFormatter dtf = DateTimeFormatter.ofPattern("yyyyMMdd HHmmss Z");
//одинаковая дата, но в разных часовых поясах
String date1 = "20200220 080200 +0100";
String date2 = "20200220 090200 +0200";
//преобразуем в OffsetDateTime
OffsetDateTime odt1 = OffsetDateTime.parse(date1, dtf);
OffsetDateTime odt2 = OffsetDateTime.parse(date2, dtf);
//способ 1 - использовать метод isEqual()
System.out.println(odt1.isEqual(odt2));
//способ 2 - приводим одну из дат к смещению времени другой
OffsetDateTime odt2Offset = OffsetDateTime.ofInstant(odt2.toInstant(), odt1.getOffset());
System.out.println(odt2Offset.equals(odt1));
//способ 3 - приводим обе даты к UTC
OffsetDateTime odt1Utc = OffsetDateTime.ofInstant(odt1.toInstant(), ZoneOffset.UTC);
OffsetDateTime odt2Utc = OffsetDateTime.ofInstant(odt2.toInstant(), ZoneOffset.UTC);
System.out.println(odt1Utc.equals(odt2Utc));