“%tB”格式化程序如何工作?

时间:2013-04-26 08:57:10

标签: java exception format

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

我应该得到一个“十二月”,但是我得到一个很好的例外

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

这意味着我使用的语法是错误的。 我找不到任何在线解释%tB格式化命令的参考。 有人帮忙澄清此事吗? 提前谢谢。

2 个答案:

答案 0 :(得分:4)

来自Formatter documentation

  

日期/时间 - 可以应用于能够编码的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

答案 1 :(得分: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);
  }
}