如何让Joda使用String.format方法(即java.util.Formatter类)?

时间:2012-06-01 13:45:46

标签: java formatting jodatime

是否可以使org.joda.time.LocalDate.LocalDate对象与String.format无缝协作?这是一个简单的测试用例来说明我正在尝试做的事情:

public class JodaTests {

    @Test
    public void testLocalDateStringFormat() {
        final Logger logger = LoggerFactory.getLogger(JodaTests.class);
        //works, prints: 2012-06-01
        logger.info(String.format("%s", new LocalDate()));
        //works, prints: 06/01/2012
        logger.info(String.format("%1$tm/%1$td/%1$tY", new LocalDate().toDate()));
        //throws java.util.IllegalFormatConversionException: m != org.joda.time.LocalDate
        logger.info(String.format("%1$tm/%1$td/%1$tY", new LocalDate()));
    }

}

很明显,我可以调用toDate方法将LocalDate转换为java.util.Date,然后使用Formatter正常工作。但有没有办法配置Joda和/或JDK以某种方式使我在那里的第3行(抛出异常的那个)工作?我尝试过网络搜索,还搜索了一下 Joda API但没有看到任何明显的答案。

澄清:我了解Joda的内置格式化功能(通过DateTimeFormat),但我特别需要将LocalDate格式化为String.format我正在使用的库代码。

通过在this article中描述的自定义类型中实现Formattable接口,看起来有一些功能有限。不幸的是,LocalDatefinal类,因此我无法(轻松)扩展它以实现接口。我想包装类是唯一的方法。或者,当然,通过使用%d格式字符串然后获取每个单独的字段(即LocalDate.getYear),这在我的情况下是不可取的。

1 个答案:

答案 0 :(得分:4)

你需要使用字符串格式化程序,如果你只需要一个字符串就可以做到这一点(或使用其他格式/模式):

DateTimeFormat.forPattern("dd MMM yyyy").print(new LocaDate());