Я считаю, что следующее должно соответствовать вашей цели.
String dateTimeString = "2020-04-30T09:59:00.272-05:00";
OffsetDateTime databaseDateTime = OffsetDateTime.parse(dateTimeString );
OffsetDateTime currentDateTime = OffsetDateTime.now(ZoneId.systemDefault());
if (databaseDateTime.isAfter(currentDateTime)) {
System.out.println("" + databaseDateTime + " is after " + currentDateTime);
} else {
System.out.println("" + databaseDateTime + " is before or equal to " + currentDateTime);
}
Вывод, когда я только что запустил код в моем часовом поясе (Европа / Копенгаген):
2020 -04-30T09: 59: 00.272-05: 00 после 2020-04-26T21: 48: 36.331752 + 02: 00
Поскольку ваша строка из базы данных содержит смещение UT C ( -05:00
) и без часового пояса (например, America / New_York), я нашел более подходящим для анализа в OffsetDateTime
. ZonedDateTime
было бы излишним. По местному времени я передаю ZoneId.systemDefault()
методу now
из OffsetDateTime
. Сравнение двух OffsetDateTime
объектов с isAfter()
прекрасно работает, даже если смещения разные, это учитывается. Есть также методы isBefore
и isEqual
для сравнения.
Шаг назад, в большинстве случаев вам не следует получать дату и время в виде строки из вашей базы данных. Ваш драйвер JDB C 4.2 или ваша современная реализация JPA, такая как Hibernate 5, будут рады получить для вас объект OffsetDateTime
из базы данных. См. Например мой ответ здесь .