格式化包含 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);
假设 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));
如果让我退后一步:这可能有点像设计问题。您不应该将日期存储在 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.
基本上我有一个包含日期的字符串,我试图让它在只有 1 位数字的月份和日期之前打印出 0。所以 1 会打印出 01。这是我编写的代码,但我收到一条错误消息:线程异常 "main"java.util.IllegalFormatConversionException: d != java.lang.String.
day = String.format("%02d", day);
假设 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));
如果让我退后一步:这可能有点像设计问题。您不应该将日期存储在 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.