You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

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

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.10.05 03:39:02