是否可以使org.joda.time.LocalDate.LocalDate
對象與String.format
無縫配合工作?下面是一個簡單的測試案例來說明我想要做的事:如何讓Joda使用String.format方法(即java.util.Formatter類)?
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以使得我在那裏的第三行(引發異常的行)起作用?我嘗試過網頁搜索,並且通過 Joda API搜索了一下,但沒有看到任何明顯的答案。
澄清:我知道喬達內置的格式設置功能(通過DateTimeFormat
),但我特別需要與String.format
一個LocalDate
格式化,由於我使用一些庫代碼。
它看起來像有是在this article描述實現您的自定義類型的Formattable
接口做一些這方面的能力有限。不幸的是,LocalDate
是一個final
類,所以我不能(容易地)擴展它來實現接口。我想包裝類是唯一的出路。或者,當然,通過使用%d
格式字符串,然後獲取每個單獨的字段(即LocalDate.getYear
),這在我的情況下是不可取的。
我還是不明白,爲什麼你不能只使用JODA的格式化代碼來獲得一個'String',然後你可以將它傳遞給'String.format'。 –
這可能是我最終做的。我使用了Spring Batch,它內置了對從輸出對象中提取字段的支持(在我的情況下,這是一個包含許多不同類型字段的複雜類,包括'LocalDate's),並將這些值寫入到一個平面文件中最小的配置。然而,它在實踐中似乎並不太適用(不僅僅是這樣,而且還需要格式化 - 以一致的方式 - BigDecimals可能會或可能不會是null)。所以我可能只需要累積一堆'String's,而不是使用Spring Batch格式的聚合器功能。 –