2012-05-08 25 views
15

joda-time DateTimeFormatterからパターン文字列を取得できますか?joda-time DateTimeFormatterのパターン文字列?

DateTimeFormatter formatter = DateTimeFormat.forPattern("yyyyMMdd"); 
String originalPattern = formatter. ??? 
+0

を私は仮定し、あなたが戻って '' "YYYYMMDD" を得るために探していますか?あなたの特定の例では、別の 'String'変数を宣言するだけです。十分ではない理由はありますか? –

+7

@MattBall、これはほぼ確実に問題を説明するための単純な例です。質問そのものは十分明確です。 –

+1

FYI同様の質問:[JDK 8のDateTimeFormatterを指定した元のパターン文字列を取得する](http://stackoverflow.com/q/28949179/642706) java.timeクラスは、Joda-Timeプロジェクトに取って代わるものです。 –

答えて

21

Joda Timeは、DateTimeFormatterから元のパターンを取得する方法を提供しません。 1つの理由は、DateTimeFormatterが必ずしもパターンから作成されたとは限りません。たとえばDateTimeFormat.forStyle()はパターンをまったく使用しません。

しかし、常にパターンを使用する場合は、DateTimeFormatterが構築されたときにDateTimeFormatクラスをラップしてパターンを記録することができます。そうすれば、簡単な静的メソッドで後で見ることができます。たとえば:

public class ReversableDateTimeFormat { 

    private static final Map<DateTimeFormatter, String> patternHistory = new HashMap<DateTimeFormatter, String>(); 

    public static DateTimeFormatter forPattern(String pattern) { 
    DateTimeFormatter dateTimeFormatter = DateTimeFormat.forPattern(pattern); 
    patternHistory.put(dateTimeFormatter, pattern); 
    return dateTimeFormatter; 
    } 

    public static String getPattern(DateTimeFormatter dateTimeFormatter) { 
    return patternHistory.get(dateTimeFormatter); 
    } 

} 

は、その後、あなたはこれを行うことができます。

DateTimeFormatter formatter = ReversableDateTimeFormat.forPattern("yyyyMMdd"); 
String originalPattern = ReverseableDateTimeFormat.getPattern(formatter); 
+3

優れています。時には、あなたは良い古い "それは不可能"を探しているだけです。それが適用可能な場合についても、素晴らしい解決策です。 – charleslparker

+2

答えは完全に正しいです。しかし、スタイルを使用してパターンを知りたい場合は、 'DateTimeFormat.patternForStyle()'を使用することができます。 –

関連する問題