4
System.out.format("%tB",12);

I should get a "December" out of it, however i get a nice exception

Exception in thread "main" java.util.IllegalFormatConversionException: b != java.lang.Integer

It means the syntax I used is wrong. I cannot find any reference on line explaining the %tB formatting command. Is anybody help to clarify the matter? Thanks in advance.

4

2 回答 2

5

Formatter文档中:

日期/时间 - 可应用于能够编码日期或时间的 Java 类型:longLongCalendarDate.

您可以通过使用长整数(例如12L. 但请注意,格式化程序需要日期的整数表示(即毫秒精度的 Unix 时间戳)。

为了得到你想要的,你可以尝试在 1970 年的月中手动构建一个近似的时间戳:

int month = 12;
int millisecondsInDay = 24*60*60*1000;
long date = ((month - 1L)*30 + 15)*millisecondsInDay;
System.out.format("%tB", date);

或者简单地使用一个Date对象:

System.out.format("%tB", new Date(0, 12, 0));

另请注意,您可以在没有以下情况下做同样的事情Formatter

java.text.DateFormatSymbols.getInstance().getMonths()[12-1];

有关DateFormatSymbols更多信息,请参阅。

于 2013-04-26T09:00:39.557 回答
2

一个示例程序

import java.util.Calendar;
import java.util.Formatter;

public class MainClass {
  public static void main(String args[]) {
    Formatter fmt = new Formatter();
    Calendar cal = Calendar.getInstance();

    fmt.format("Today is day %te of %<tB, %<tY", cal);
    System.out.println(fmt);
  }
}
于 2013-04-26T09:01:50.187 回答