【问题标题】:Java String.format failed to format Date and Integer altogetherJava String.format 无法完全格式化 Date 和 Integer
【发布时间】:2014-01-30 04:43:31
【问题描述】:

我正在尝试使用 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));

【问题讨论】:

    标签: java exception string.format


    【解决方案1】:

    使用2$在参数列表中添加对第二个参数的引用

    String format = "http://az.website.com/api/calendar/date/%1$tY-%1$tm-%1$te/user_id/%2$d";
    

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

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

    【讨论】:

    • 出现错误,不是 $d 而是 %d。我已更正并标记为已接受。
    • @AZ_ 这对我来说似乎是错误的。您可以编辑您的问题并添加您正在运行的实际代码和失败的代码吗?
    • @AZ_ 该代码中的最后一个路径段是%2$%d。它应该是%2$d。如果你说这不起作用,我不知道......它对我有用。
    • @AZ_ 哦,对于这种情况,您错误地调用了format。应该是String.format(format, date, 23)
    • @AZ_ 不用担心,很高兴我们知道了。祝你好运!
    猜你喜欢
    • 1970-01-01
    • 2011-06-20
    • 1970-01-01
    • 2013-06-22
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多