是否可以使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
接口,看起来有一些功能有限。不幸的是,LocalDate
是final
类,因此我无法(轻松)扩展它以实现接口。我想包装类是唯一的方法。或者,当然,通过使用%d
格式字符串然后获取每个单独的字段(即LocalDate.getYear
),这在我的情况下是不可取的。
答案 0 :(得分:4)
你需要使用字符串格式化程序,如果你只需要一个字符串就可以做到这一点(或使用其他格式/模式):
DateTimeFormat.forPattern("dd MMM yyyy").print(new LocaDate());