2012-05-08 11 views
15

¿Es posible obtener la cadena del patrón de un tiempo joda DateTimeFormatter?Cadena de patrón de un tiempo joda FechaTiempoFormato?

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

Asumo que está mirando para conseguir ' "AAAAMMDD"' espalda? En su ejemplo particular, podría declarar una variable 'String' separada. ¿Hay alguna razón que no sea suficiente? –

+7

@MattBall, casi seguro porque es solo un ejemplo simplificado para ilustrar el problema. La pregunta en sí es lo suficientemente clara. –

+1

FYI, Pregunta similar para java.time: [Obtenga la cadena de patrón original con un formato JDK 8 DateTimeFormatter?] (Http://stackoverflow.com/q/28949179/642706). Las clases java.time suplantan al proyecto Joda-Time. –

Respuesta

21

Joda Time no proporciona una forma de obtener el patrón original de un DateTimeFormatter. Una razón es probable que un DateTimeFormatter no se haya creado necesariamente a partir de un patrón; por ejemplo, DateTimeFormat.forStyle() no usa patrones en absoluto.

Sin embargo, si siempre usa patrones, puede ajustar la clase DateTimeFormat para registrar el patrón cuando se construye el DateTimeFormatter. De esta forma, puedes buscarlo más tarde con un método estático simple. Por ejemplo:

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

} 

entonces usted puede hacer esto:

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

Excelente. A veces, solo estás buscando un buen viejo "eso es imposible". Una buena solución, también, para los casos en que sea aplicable. – charleslparker

+2

La respuesta es completamente correcta. Pero, si desea usar estilos y conocer el patrón, puede usar 'DateTimeFormat.patternForStyle()'. –

Cuestiones relacionadas