Java中使用Formatter类格式化日期时间抛出参数缺失异常咨询
关于使用Java Formatter类格式化日期时间的问题解答
异常原因
你遇到的java.util.MissingFormatArgumentException异常是由Formatter的格式符匹配规则导致的:默认情况下,每一个%t开头的日期/时间格式符都会独立匹配一个入参,你的代码里写了%tm、%td、%ty三个格式符,却只传入了1个LocalDate对象,参数数量不匹配因此抛出异常。
实现方法
使用Formatter类的format方法完全可以实现日期时间格式化需求,只需要通过参数索引标记指定所有格式符复用同一个日期对象即可。参数索引的写法为n$,放在%和格式符之间,n代表取第几个入参(从1开始计数)。
正确代码示例:
import java.time.LocalDate; import java.util.Formatter; public class DateFormatDemo { public static void main(String[] args) { LocalDate date = LocalDate.now(); Formatter formatter = new Formatter(); // 1$表示所有格式符都取第一个入参date formatter.format("%1$tm/%1$td/%1$ty", date); System.out.println(formatter); // 输出示例:09/15/24 } }
常用扩展用法
- 可以直接使用封装好的复合日期格式符简化代码,比如
%tF直接输出ISO标准日期格式(yyyy-MM-dd),不需要拆分年月日:formatter.format("%1$tF", date); // 输出示例:2024-09-15 - 如果要格式化包含时间的
LocalDateTime,也可以使用%tT输出时分秒格式:LocalDateTime dateTime = LocalDateTime.now(); formatter.format("%1$tF %1$tT", dateTime); // 输出示例:2024-09-15 14:30:22 - Formatter支持的可格式化日期类型包括:
LocalDate、LocalDateTime、ZonedDateTime、java.util.Date、Calendar等常用日期类。
内容的提问来源于stack exchange,提问作者M Nasir Baloch
相关产品推荐
相关产品推荐

