基本上,我有一个包含日期的字符串,并且试图将它打印在只有1位数字的月份和日期的0前面。所以1会打印出01。这是我编写的代码,但是我得到一个错误,它是:线程“ main”中的异常java.util.IllegalFormatConversionException:d!= java.lang.String。
day = String.format("%02d", day);
答案 0 :(得分:2)
假设day
是int
然后使用
day = String.format("%02d", day);
您正在尝试将字符串重新分配给int
尝试
String dayStr = String.format("%02d", day);
修改
由于day
已经是String
,所以format("%02d", day);
将不起作用d
意味着它是int
因此请先将其转换为int
day = String.format("%02d", Integer.valueOf (day));
答案 1 :(得分:2)
如果允许我退后一步:这可能听起来有点像设计问题。您不应该将日期存储在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);
输出:2019年1月9日