java.time
Разбор ввода
Способ управления интерпретацией двухзначного года в yymmdd
- это метод appendValueReduced
из DateTimeFormatterBuilder
.
DateTimeFormatter twoDigitFormatter = new DateTimeFormatterBuilder()
.appendValueReduced(ChronoField.YEAR, 2, 2, 1870)
.appendPattern("MMdd")
.toFormatter();
String exampleInput = "691129";
LocalDate date = LocalDate.parse(exampleInput, twoDigitFormatter);
Если указать базовый год 1870, двузначные годы следует интерпретировать в диапазоне от 1870 до 1969 (так всегда до 1970 г.). Поставьте другой базовый год в соответствии с вашими требованиями. Кроме того, если вы не уверены, что входные годы за период в 100 лет ожидаются и действительны, я рекомендую вам выполнить проверку диапазона проанализированной даты.
Форматирование и вывод на печать
DateTimeFormatter fourDigitFormatter = DateTimeFormatter.ofPattern("uuuuMMdd");
String result = date.format(fourDigitFormatter);
System.out.println(result);
Выходные данные в этом примере:
19691129
Если вместо этого ввод был 700114
, вывод:
18700114
Используйте LocalDate для сохранения вашей даты
Вместо преобразования вашей даты из одного строкового формата в другой, я предлагаю лучше сохранить дату в LocalDate
, а не в строке (точно так же, как вы не сохраняете целочисленное значение в строке). Когда ваша программа принимает строковый ввод, сразу выполните синтаксический анализ LocalDate
. Только когда нужно выдать строку, отформатируйте LocalDate
обратно в строку. По этой причине я также отделил синтаксический анализ от форматирования выше.
Ссылка
Обучающее руководство по Oracle: Дата и время , объясняющее, как использовать java.time.