2

是否可以使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为 a java.util.Date,然后它可以与Formatter一起正常工作。但是有没有办法以某种方式配置 Joda 和/或 JDK 以使我在那里的第 3 行(引发异常的行)工作?我尝试过网络搜索,也通过 Joda API 进行了一些搜索,但没有看到任何明显的答案。

澄清:我知道 Joda 的内置格式化功能(通过),但由于我正在使用一些库代码,我DateTimeFormat特别需要格式化 a 。LocalDateString.format

如本文Formattable所述,通过在您的自定义类型中实现接口,似乎有一些有限的功能可以做到这一点。不幸的是,是一个类,所以我不能(轻松)扩展它来实现接口。我想包装类是唯一的方法。或者,当然,通过使用格式字符串然后获取每个单独的字段(即),这在我的情况下是不可取的。LocalDatefinal%dLocalDate.getYear

4

1 回答 1

4

您是否需要使用字符串格式化程序,如果您只需要一个字符串,您可以这样做(或使用另一种格式/模式):

DateTimeFormat.forPattern("dd MMM yyyy").print(new LocaDate());
于 2012-06-01T13:50:20.513 回答