Есть ли способ конвертировать дату в Java до 1970 года? - PullRequest
0 голосов
/ 11 июля 2019

Я хотел преобразовать дату в формате гггммдг в ГГГГММДД, но при использовании класса simpledateformat я получаю годы после 1970 года, но требуется год, предшествующий 1970 году.

1 Ответ

2 голосов
/ 11 июля 2019

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.

...