Java String.format 无法完全格式化日期和整数

标签 java exception string.format

我正在尝试使用整数格式化日期,但它们单独工作都很好,但是当我将它们放在一起时,它会抛出以下错误。

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));

最佳答案

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

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

String.format(...) 内部使用 Formatter javadoc 指出

The argument index is a decimal integer indicating the position of the argument in the argument list. The first argument is referenced by "1$", the second by "2$", etc.

关于Java String.format 无法完全格式化日期和整数,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/21447959/

相关文章:

java - 如果没有第二个参数转换,assertEquals 将无法工作

javascript - jsp中Select框处理一百万条记录的最佳方式

Java 堆空间异常 java.lang.OutOfMemoryError

当我运行关于Java集合接口(interface)的java代码时发生java.lang.ClassCastException

c# - 从代码隐藏格式化 DataGridTextColumn

c# - C# 中的字符串格式

java - 如何在Java中测试JSON Collection对象是否为空

Java,无法降低从对象继承的方法的可见性

.net - Awesomium WebControl 挂起

android - 数字格式不考虑区域设置。考虑使用 String.format 而不是 android studio