2015-09-12 16 views
9

Un Java 8 DateTimeFormatter creato da un modello come d. MMM u può analizzare solo le date con il mese scritta nello stile definito da TextStyle.SHORT (ad es 13. Feb 2015), un DateTimeFormatter creato da d. MMMM u può analizzare solo le date con il mese scritta nello stile definito da TextStyle.FULL (ad es. 13. February 2015).È possibile analizzare le date sia con TextStyle.SHORT che con TextStyle.FULL per il mese?

Nel "vecchio" SimpleDateFormat, la differenza tra "MMM" e "MMMM" era importante solo per la formattazione, non per l'analisi, quindi era facilmente possibile creare un parser che comprendesse sia la forma FULL che quella SHORT nomi dei mesi.

È possibile creare un DateTimeFormatter Java 8 che può anche farlo? O devo sempre creare due parser, uno con il FULL e uno con il pattern SHORT?

risposta

6

Si potrebbe fare le diverse mese modelli opzionale:

DateTimeFormatter formatter = DateTimeFormatter.ofPattern("d. [MMMM][MMM] u HH:mm:ss z", Locale.US); 

    ZonedDateTime zdt1 = ZonedDateTime.parse("4. Jan 2015 00:00:00 UTC", formatter); 
    ZonedDateTime zdt2 = ZonedDateTime.parse("4. January 2015 00:00:00 UTC", formatter); 

    System.out.println(zdt1); 
    System.out.println(zdt2); 

uscita:

2015-01-04T00:00Z[UTC] 
2015-01-04T00:00Z[UTC] 

EDIT

Questa formattazione può essere utilizzato solo per parse(), si dovrà per utilizzare uno diverso per format().

+0

Ok, l'unico lato negativo che vedo è che ora è in grado di analizzare stringhe "rotte" come "15 gennaio 2015", ma non è proprio un grosso problema. Ancora indeciso se avere due Formatter/Parser potrebbe non essere la soluzione più elegante ... – David

+0

@David Direi che se ne hai solo due, non importa quale soluzione scegli. Ma se c'è la possibilità di analizzare più tipi di formati, dovresti probabilmente scegliere un parser e un formattatore (puoi anche annidare le parti opzionali). – Cinnam

Problemi correlati