2012-05-08 15 views
15

Czy można uzyskać ciąg wzoru z joda-time DateTimeFormatter?Ciąg wzorcowy od joda-time DateTimeFormatter?

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

Zakładam szukasz dostać ' "rrrrmmdd"' z powrotem? W twoim konkretnym przykładzie możesz po prostu zadeklarować oddzielną zmienną "String". Czy jest jakiś powód, który nie wystarczy? –

+7

@MattBall, prawie na pewno, ponieważ jest to uproszczony przykład ilustrujący problem. Samo pytanie jest wystarczająco jasne. –

+1

FYI, podobne pytanie dla java.time: [Pobierz oryginalny wzorzec String podany jako JDK 8 DateTimeFormatter?] (Http://stackoverflow.com/q/28949179/642706). Klasy java.time zastępują projekt Joda-Time. –

Odpowiedz

21

Czas Joda nie pozwala uzyskać oryginalnego wzoru z obiektu DateTimeFormatter. Jednym z powodów jest prawdopodobnie to, że obiekt DateTimeFormatter niekoniecznie został utworzony ze wzoru; na przykład DateTimeFormat.forStyle() w ogóle nie używa wzorców.

Jeśli jednak zawsze używasz wzorców, możesz zawinąć klasę DateTimeFormat, aby nagrać wzór, gdy zostanie skonstruowany model DateTimeFormatter. W ten sposób możesz sprawdzić to później za pomocą prostej metody statycznej. Na przykład:

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); 
    } 

} 

Następnie można to zrobić:

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

Doskonały. Czasami po prostu szukasz dobrego, starego "to niemożliwe". Doskonałe rozwiązanie również w przypadkach, w których ma to zastosowanie. – charleslparker

+2

Odpowiedź jest całkowicie poprawna. Ale jeśli chcesz używać stylów i znać wzorzec, możesz użyć 'DateTimeFormat.patternForStyle()'. –

Powiązane problemy