java - ofpattern - Obtener el patrón original Cadena dado un JDK 8 DateTimeFormatter?
string to date java (3)
No es una solución sencilla ni elegante, pero si utiliza los resultados del método .toString()
DateTimeFormatter
, podría ser posible desplegar su propio código que analice la cadena resultante y reconstruya el patrón original.
Algún código que imprime algunos resultados .toString()
para varios patrones:
java.time.format.DateTimeFormatter variousFormatPatterns =
java.time.format.DateTimeFormatter.ofPattern("yy MM dd");
System.out.println("Test 1: " + variousFormatPatterns.toString() );
variousFormatPatterns = java.time.format.DateTimeFormatter.ofPattern("yy-MM-dd");
System.out.println("/nTest 2: " + variousFormatPatterns.toString() );
variousFormatPatterns = java.time.format.DateTimeFormatter.ofPattern("yyMMdd");
System.out.println("/nTest 3: " + variousFormatPatterns.toString() );
variousFormatPatterns = java.time.format.DateTimeFormatter.ofPattern("MM/dd/yyyy HH:mm:ss");
System.out.println("/nTest 4: " + variousFormatPatterns.toString() );
Resultados (observe la retención de los caracteres delimitadores de espacio / guión / barra / colon):
Prueba 1: Valor reducido (YearOfEra, 2,2,2000-01-01) '''' Valor (MonthOfYear, 2) '''' Valor (DayOfMonth, 2)
Prueba 2: Valor reducido (YearOfEra, 2,2,2000-01-01) ''-'' Valor (MonthOfYear, 2) ''-'' Valor (DayOfMonth, 2)
Prueba 3: Valor reducido (YearOfEra, 2,2,2000-01-01) Valor (MonthOfYear, 2) Valor (DayOfMonth, 2)
Prueba 4: Valor (MonthOfYear, 2) ''/'' Value (DayOfMonth, 2) ''/'' Value (YearOfEra, 4,19, EXCEEDS_PAD) '''' Value (HourOfDay, 2) '':'' Value (MinuteOfHour, 2) '': ''Valor (SecondOfMinute, 2)
Implementar este enfoque requeriría estudiar el código en java.time.format.DateTimeFormatterBuilder
. El JavaDoc para el appendPattern(String pattern)
parece ser particularmente útil. Es posible que pueda tomar algunos atajos si sabe que está trabajando con solo algunos tipos de patrones.
Echando un vistazo rápido a través del código DateTimeFormatterBuilder
, es probable que exista un riesgo en este tipo de solución, ya que las cadenas como Value
, ReducedValue
, Fraction
, etc. podrían cambiar sin previo aviso en futuras versiones de Java.
Relacionado con mi pregunta here , ¿cómo obtengo el pattern
original String dado un DateTimeFormatter
?
Puede que no sea una respuesta directa a su pregunta, pero puede ayudar.
Si conoce los parámetros de cómo se construyó el formateador, puede llamar al método estático:
DateTimeFormatterBuilder.getLocalizedDateTimePattern(FormatStyle dateStyle, FormatStyle timeStyle, Chronology chrono, Locale locale)
Esto le dará el patrón como una cadena.
Se ha solicitado en la lista de correo y la respuesta es que no es posible porque no se conserva el patrón original.
El mismo hilo sugiere usar un DateTimeFormatterBuilder
que sí tiene la información.