Когда клиент отправляет время, отличное от UT C, например, стандартное время Индии (IST), и сервер не знает, какой часовой пояс использует клиент, тогда сервер ничего не может сделать, чтобы сделать он работает правильно. Вместо этого я предлагаю вам убедиться, что клиент всегда отправляет время в UT C.
Клиент
Убедитесь, что вы всегда отправляете время в UT C:
DateTimeFormatter formatter = DateTimeFormatter.ofPattern("uuuuMMdd'T'HHmmss");
String requestExpirationTime = OffsetDateTime.now(ZoneOffset.UTC)
.plusMinutes(5)
.format(formatter);
System.out.println(requestExpirationTime);
Пример вывода только что запущенного:
20200506T183409
Сервер
Теперь сервер знает, что время указано в UT C. Я предполагаю, что он использует форматировщик, идентичный тому, который использовал клиент.
OffsetDateTime dateTime = LocalDateTime.parse(requestExpirationTime, formatter)
.atOffset(ZoneOffset.UTC);
OffsetDateTime systemTime = OffsetDateTime.now(ZoneOffset.UTC);
if (dateTime.isBefore(systemTime)) {
System.out.println("Request timedout: RequestExpirationTime is before current system time");
} else {
System.out.println("OK");
}
ОК
Совет
Вы можете добавить Z
к строке отметки времени, чтобы было ясно, что это UT C. Это может предотвратить некоторые ошибки в будущем.
20200506T183409Z