Проблема с форматированием строки, содержащей дату в Java - PullRequest
0 голосов
/ 03 октября 2019

В основном у меня есть строка, которая включает дату, и я пытаюсь, чтобы она выводила 0 перед месяцами и днями, которые имеют только 1 цифру. поэтому я бы вывел 01. Это код, который я написал, но я получаю сообщение об ошибке: Исключение в потоке "main" java.util.IllegalFormatConversionException: d! = java.lang.String.

day = String.format("%02d", day);

Ответы [ 2 ]

2 голосов
/ 03 октября 2019

Если мне позволят сделать шаг назад: это может немного пахнуть проблемой дизайна. Вы не должны хранить свою дату в строке в формате dd/mm/yyyy. Вы должны хранить свою дату в LocalDate. Конечно, если дата является строковым вводом, например, от пользователя, вы должны принять как таковой. Затем преобразуйте в LocalDate:

    DateTimeFormatter dateFormatter = DateTimeFormatter.ofPattern("d/M/u");
    String dateString = "1/9/2019";
    LocalDate date = LocalDate.parse(dateString, dateFormatter);

Для форматирования дня месяца в две цифры используйте другую DateTimeFormatter:

    DateTimeFormatter dayOfMonthFormatter = DateTimeFormatter.ofPattern("dd");
    String dayString = date.format(dayOfMonthFormatter);
    System.out.println("Day in two digits is " + dayString);

В этом случае выведите:

Днем из двух цифр является 01

Или для вывода полной даты с двузначным днем ​​и двухзначным месяцем:

    DateTimeFormatter outputDateFormatter = DateTimeFormatter.ofPattern("dd/MM/uuuu");
    String outputString = date.format(outputDateFormatter);
    System.out.println("Output: " + outputString);

Вывод: 01/09/2019

Ссылка: Обучающая программа Oracle: Дата Время .

2 голосов
/ 03 октября 2019

Если предположить, что day является int

, то с помощью

day = String.format("%02d", day);

вы пытаетесь переназначить строку в int

try

String dayStr = String.format("%02d", day);

edit

Так как day уже является String, тогда format("%02d", day); не будет работать d означает, что это int

Так что преобразовать его в int сначала

day = String.format("%02d", Integer.valueOf (day));
...