2012-05-08 24 views
15

是否有可能從joda-time DateTimeFormatter獲取模式字符串?來自joda-time DateTimeFormatter的模式字符串?

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

我假設你希望得到' 「年月日」'回來嗎?在你的特定例子中,你可以聲明一個單獨的'String'變量。有沒有足夠的理由? –

+7

@MattBall,幾乎肯定是因爲這只是一個簡單的例子來說明問題。這個問題本身就很清楚。 –

+1

僅供參考,類似問題的java.time:[獲取原始模式字符串給定JDK 8 DateTimeFormatter?](http://stackoverflow.com/q/28949179/642706)。 java.time類取代了Joda-Time項目。 –

回答

21

Joda Time沒有提供從DateTimeFormatter獲取原始模式的方法。一個原因可能是DateTimeFormatter不一定是從模式創建的;例如DateTimeFormat.forStyle()根本不使用模式。

但是,如果您始終使用模式,那麼您可以將DateTimeFormat類包裝起來,以便在構建DateTimeFormatter時記錄模式。這樣你可以稍後用一個簡單的靜態方法來查看它。例如:

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()'。 –