Я получаю исключение java.util.IllegalFormatConversionException в этом коде.я пытаюсь использовать класс даты в Java, чтобы распечатать дату - PullRequest
0 голосов
/ 08 июня 2018

Я получаю java.util.IllegalFormatConversionException в этом коде.Я пытаюсь использовать класс Date в Java для распечатки даты.

package numbersstatics;

public class Date {
    public static void main(String args[]) {

        Date d = new Date();

        String w = String.format("%tc",d);

        System.out.println(w);
    }
}

Ответы [ 3 ]

0 голосов
/ 08 июня 2018

Date d = new Date() вот в чем проблема.

Ваш класс также имеет имя Date, и я не вижу ни одного импорта.Таким образом, вы в основном создаете экземпляр своего собственного класса, а не java.util.Date instance.

Попробуйте import java.util.Date;

Или попробуйте этот код

java.util.Date d = new java.util.Date();

String w = String.format("%tc",d);

System.out.println(w);

Примечание.Всегда приятно добавить Stacktrace с вопросом, иначе трудно найти ошибку.

0 голосов
/ 09 июня 2018

Позвольте мне попытаться вдохновить вас на изучение и понимание сообщения об ошибке в исключении.Я получаю

java.util.IllegalFormatConversionException: c! = Numbersstatics.Date

numbersstatics.Date относится к классу Date в пакете numbersstatics.Первое, на что нужно обратить внимание, это то, что это не тот класс Date в java.util, который вы, возможно, планировали.Это твой собственный класс.Поэтому вы можете спросить себя, почему String.format жалуется на ваш собственный класс.

Ради полноты c относится к букве в спецификации формата %tc.Поэтому в сообщении говорится, что вы не можете отформатировать свой собственный класс Date с помощью %tc.Это может заставить вас осознать, что вы передали экземпляр своего собственного класса String.format.

Дата устарела

Хотя явное упоминание java.util.Date должно заставить ваш код работать, не думайте.Класс Date давно устарел и плохо спроектирован.Сегодня у нас намного лучше в java.time, современном Java-API даты и времени.Используйте, например, как

    ZonedDateTime zdt = ZonedDateTime.now(ZoneId.of("Asia/Kolkata"));
    String w = String.format("%tc", zdt); 

На моем компьютере он только что дал

Сб 9 июня 18:03:44 IST 2018

Вы также можетеиспользуйте DateTimeFormatter, это то, что делает большинство программистов.

Позвольте мне добавить: если бы вы назвали свой собственный класс так же, как класс из java.time, который вы использовали, здесь ZonedDateTime, вы быуже во время компиляции получите уведомление о том, что в вашем классе нет метода now, который вы вызываете, что может быть немного понятнее, и, по крайней мере, вам не придется ждать до времени выполнения, чтобы увидеть его.Хотя это мелочь, это один из тысяч примеров, когда современные классы более полезны, чем старомодные.

Ссылка: Учебное пособие по Oracle: Дата и время объясняя, как использовать java.time.

0 голосов
/ 08 июня 2018

Попробуйте это:

SimpleDateFormat format = new SimpleDateFormat("yyyy/MM/dd");
String w = format.format(curDate);

System.out.println(w);

или это:

Calendar cal = Calendar.getInstance();
System.out.printf("Current time and date: %tc\n", cal);
...