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

Trouble with formatting a string that contains a date in java

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

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

假设 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));

如果让我退后一步:这可能有点像设计问题。您不应该将日期存储在 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);

这种情况下的输出是:

Day in two digits is 01

或者用两位数的日和两位数的月来输出完整的日期:

    DateTimeFormatter outputDateFormatter = DateTimeFormatter.ofPattern("dd/MM/uuuu");
    String outputString = date.format(outputDateFormatter);
    System.out.println("Output: " + outputString);

Output: 01/09/2019

Link: Oracle tutorial: Date Time.