IllegalFormatConversionException d! = java .lang.Integer при попытке печати даты? - PullRequest
0 голосов
/ 26 февраля 2020
public void display() {
    System.out.printf("%-10d%-12s%-12s%10.2f%8d%12.2f%1$td.%1$tm.%1$ty %n\n",
    this.getID(),
    this.getFirstName(),
    this.getLastName(),
    this.getState(),
    this.getNo(),
    this.getAmt(),
    this.getDate());
}

Это мой метод для распечатки части моей информации. this.getDate возвращает дату в виде типа Date (java .util.Date).

Мне дали пример как System.out.printf("%1$td.%1$tm.%1$ty %n", date); для распечатки данных в формате dd.mm.yyyy. Я пытался вставить это в свой код, но судя по всему, я допустил ошибку форматирования?

Я пробовал несколько методов печати сейчас, но меня это сбивает с толку, как это будет работать само по себе, но потом У меня возникают проблемы, когда я пытаюсь поместить его в более крупный оператор printf.

Ответы [ 2 ]

3 голосов
/ 26 февраля 2020

Проблема в том, что число перед знаком $ указывает на абсолютный индекс (начиная с 1! ?) объекта. Вы намеревались указать на дату (индекс 7), но вместо этого указали на первый элемент, который должен быть целым числом. Вы захотите использовать "%-10d%-12s%-12s%10.2f%8d%12.2f%7$td.%7$tm.%7$ty %n\n" для форматирования.

0 голосов
/ 26 февраля 2020

Прежде всего, форматирование даты является сложной проблемой и уже решено для вас. Итак, вы пытаетесь создать свой собственный форматер (такой как "% -10d% -12s% -12s% 10.2f% 8d% 12.2f% td.% ToString () класса Date. Если вам нужно лучшее форматирование, чем внешний вид в методе DateFormat.format (Date date) . Однако обратите внимание, что если вы используете Java 8 или выше, чем класс java.util.Date, не следует использовать. Посмотрите на пакет java.time. Использование ZonedDateTime или любой из его "братьев" вместо Date и использование DateTimeFormatter для форматирования его в строку

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...