格式化包含Java中日期的字符串时遇到问题

时间:2019-10-03 02:11:39

标签: java date date-formatting java-date

基本上,我有一个包含日期的字符串,并且试图将它打印在只有1位数字的月份和日期的0前面。所以1会打印出01。这是我编写的代码,但是我得到一个错误,它是:线程“ main”中的异常java.util.IllegalFormatConversionException:d!= java.lang.String。

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

2 个答案:

答案 0 :(得分:2)

假设dayint

然后使用

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日

链接: Oracle tutorial: Date Time

相关问题