DateTimeFormatter formatter = DateTimeFormatter.ofPattern("uuuu-MM-dd HH:mm");
String urlParam = "time=2018-08-30T09%3A22%3A31Z";
String[] splitParam = urlParam.split("=");
if (splitParam.length == 2 && splitParam[0].equals("time")) {
String incomingTimeString = URLDecoder.decode(splitParam[1], StandardCharsets.UTF_8);
OffsetDateTime time = OffsetDateTime.parse(incomingTimeString);
String timeStringForDisplay = time.format(formatter);
System.out.println(timeStringForDisplay);
}
Вывод из приведенного выше фрагмента является желательным:
2018-08-30 09: 22 * 1005 *
Обратите внимание, что время указано в UTC. Возможно, вы захотите преобразовать его в часовой пояс вашего пользователя или, по крайней мере, вывести смещение со временем.
Хороший способ сделать это - использовать URLDecoder
для декодирования %3A
из закодированной строки в двоеточия и использовать подходящий класс даты и времени для хранения даты и времени, например OffsetDateTime
или Instant
(класс Timestamp
, предложенный в комментарии, был бы плохим выбором; он давно устарел и был предназначен только для хранения и извлечения значений меток времени из баз данных SQL и из них). Ваша временная строка имеет формат ISO 8601, формат, который OffsetDateTime
, Instant
и другие современные классы даты и времени анализируют как значения по умолчанию. Это означает, что нам не нужно указывать формат.
Ссылка: Обучающее руководство по Oracle: Дата и время , объясняющее, как использовать java.time
.