Позвольте мне попытаться вдохновить вас на изучение и понимание сообщения об ошибке в исключении.Я получаю
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
.