Java String.format无法完全格式化Date和Integer

时间:2014-01-30 04:43:31

标签: java exception string.format

我正在尝试使用Integer格式化日期,但它们都可以单独工作但是当我将它们放在一起时会抛出跟随错误。

Exception in thread "main" java.util.IllegalFormatConversionException: d != java.util.Date
    at java.util.Formatter$FormatSpecifier.failConversion(Unknown Source)
    at java.util.Formatter$FormatSpecifier.printInteger(Unknown Source)
    at java.util.Formatter$FormatSpecifier.print(Unknown Source)
    at java.util.Formatter.format(Unknown Source)
    at java.util.Formatter.format(Unknown Source)
    at java.lang.String.format(Unknown Source)
    at Test.main(Test.java:10)

代码:

public class Test {

    public static void main(String[] args) {
        String format = "http://az.website.com/api/calendar/date/%1$tY-%1$tm-%1$te/user_id/%d";

        Date date = Calendar.getInstance().getTime();
        System.out.println(String.format(format, date, 23));
    }

}

如果我删除日期格式%1$tY-%1$tm-%1$te,那么它会开始正常工作,但它会一起抛出IlelgalFormatConversionExpception

这段代码出了什么问题?

更新

运行的代码但产生错误的输出。

public class Test {

    public static void main(String[] args) {
        String format = "http://az.website.com/api/calendar/date/%1$tY-%1$tm-%1$te/user_id/%2$%d";

        Date date = Calendar.getInstance().getTime();
        System.out.println(String.format(format, date) + 23);

    }

}

输出:http://az.website.com/api/calendar/date/2014-01-30/user_id/%d23

产生错误的代码:

public class Test {

    public static void main(String[] args) {
        String format = "http://az.website.com/api/calendar/date/%1$tY-%1$tm-%1$te/user_id/%2$d";

        Date date = Calendar.getInstance().getTime();
        System.out.println(String.format(format, date) + 23);

    }

}

输出:

Exception in thread "main" java.util.MissingFormatArgumentException: Format specifier '2$d'
    at java.util.Formatter.format(Unknown Source)
    at java.util.Formatter.format(Unknown Source)
    at java.lang.String.format(Unknown Source)
    at Test.main(Test.java:10)

使用Java 1.6 Android 4.3也试过

java version "1.7.0_45"
Java(TM) SE Runtime Environment (build 1.7.0_45-b18)
Java HotSpot(TM) 64-Bit Server VM (build 24.45-b08, mixed mode)

更新 @Sotirios Delimanolis真的是一个救生员。我错误地调用了这个方法。 错了 - > System.out.println(String.format(format,date)+ 23);

对 - > System.out.println(String.format(format,date,23));

1 个答案:

答案 0 :(得分:4)

使用2$

添加对参数列表中第二个参数的引用
String format = "http://az.website.com/api/calendar/date/%1$tY-%1$tm-%1$te/user_id/%2$d";

String.format(...)在内部使用其{javadoc状态

Formatter
  

参数索引是一个十进制整数,表示该位置   参数列表中的参数。第一个参数由引用   “1 $”,第二个是“2 $”,等等。