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これはFormatterで正常に動作します。しかし、Joda や JDK を何らかの方法で構成して、そこにある 3 行目 (例外をスローする行) を機能させる方法はありますか? 私は Web 検索を試みましたが、Joda API も少し検索しましたが、明らかな答えは見つかりませんでした。LocalDatejava.util.Date

明確化: Joda の組み込みの書式設定機能 ( 経由) については知っていますが、使用しているいくつかのライブラリ コードのために、特にwithDateTimeFormatを書式設定する必要があります。LocalDateString.format

この記事Formattableで説明されているように、カスタム型にインターフェイスを実装することで、これを行う機能が制限されているようです。残念ながら、はクラスであるため、(簡単に) 拡張してインターフェイスを実装することはできません。ラッパークラスが唯一の方法だと思います。または、もちろん、フォーマット文字列を使用して個々のフィールド (つまり) をフェッチすることもできますが、これは私の場合は望ましくありません。LocalDatefinal%dLocalDate.getYear

4

1 に答える 1

4

文字列フォーマッタを使用する必要がありますか? 文字列だけが必要な場合は、これを行うことができます (または別の形式/パターンを使用します):

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