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

Rol*_*all 3 java format exception

System.out.format("%tB",12);
Run Code Online (Sandbox Code Playgroud)

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

Exception in thread "main" java.util.IllegalFormatConversionException: b != java.lang.Integer
Run Code Online (Sandbox Code Playgroud)

这意味着我使用的语法是错误的。我在网上找不到任何说明%tB格式化命令的参考。有人帮忙澄清一下吗?提前致谢。

zak*_*ter 5

Formatter文档中

日期/时间-可以被施加到Java类型,其能够编码的日期或时间的:longLongCalendar,和Date

您可以使用长整数(例如)来摆脱异常12L。但是请注意,格式化程序期望日期的整数表示形式(即,具有毫秒精度的Unix时间戳)。

为了获得所需的内容,您可以尝试在1970年的一个月中手动构建一个近似的时间戳:

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

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

System.out.format("%tB", new Date(0, 12, 0));
Run Code Online (Sandbox Code Playgroud)

另请注意,您可以在没有以下情况的情况下执行相同的操作Formatter

java.text.DateFormatSymbols.getInstance().getMonths()[12-1];
Run Code Online (Sandbox Code Playgroud)

请参阅DateFormatSymbols以获取更多信息。