2015-04-29 3 views
9

Sto cercando di analizzare data in formato ISO8601:Java 8 Data e ora API - analizzare AAAA-MM-dd'T'HH: mm: ss.SSSZ

AAAA-MM-dd'T' HH: mM: ss.SSSZ

ho ragione che non è possibile analizzare con uno qualsiasi dei formati di default definiti in java.time.format.DateTimeFormatter?

Per esempio ISO_OFFSET_DATE_TIME sarà analizzare solo:

AAAA-MM-dd'T'HH: mm: ss.SSSZZ

Campioni:

yyyy-MM-dd'T'HH:mm:ss.SSSZ 
2015-04-29T10:15:00.500+0000 

yyyy-MM-dd'T'HH:mm:ss.SSSZZ 
2015-04-29T10:15:00.500+00:00 

BTW: So posso definire il mio formattatore che non è il problema. Volevo solo per garantire che non mi manca qualcosa come il ISODateTimeFormat di Joda è in grado di analizzare sia:

org.joda.time.format.DateTimeFormatter dateTimeFormatter = ISODateTimeFormat.dateTime(); 
DateTime dateTime = dateTimeFormatter.parseDateTime("2015-04-29T10:15:00.500+0000"); 
+0

È possibile impostare il proprio DateFormatter –

+0

La documentazione non è chiara la differenza tra Z e ZZ - si potrebbe dare un po 'di testo di esempio che si sta cercando di analizzare che doesn analizzare con ISO_OFFSET_DATE_TIME? (Sembra che sia più simile a ZZZZZ che ZZ, in quanto include i due punti.) –

+2

Si scopre che definire un programma di formattazione java.time in grado di analizzare entrambi non è semplice. – bowmore

risposta

4

Lei ha ragione in quanto questo non sembra corrispondere a uno qualsiasi dei formati di default, quindi è necessario creare il tuo formato con un java.time.format.DateTimeFormatterBuilder.

+0

Come triste, so che posso definire il mio formato che è in grado di analizzare yyyy-MM-dd'T'HH: mm: ss.SSSZ che non è il problema qui. Voglio un formato che sia in grado di analizzare sia "Z" che "ZZ", idealmente quello predefinito che viene fornito in java.time.format. * Da qualche parte – vehovmar

1

Joda utilizza i formati ISO8601 per il valore predefinito ISODateTimeFormat. Quindi, in base al documento http://www.w3.org/TR/NOTE-datetime, Joda non sarebbe in grado di analizzare il tuo formato.

+1

Puoi provare da solo Joda è in grado di analizzarlo. – vehovmar

+0

Vedere la mia risposta, ovviamente Joda/java.util.time può creare un DateTimeFormatter in grado di analizzare il formato specificato. – llogiq

+0

grazie per avermelo fatto sapere –

3

Non sono sicuro che questa sia la risposta prevista.

Metodo 1

Parse usando immediata

Instant.parse("2015-06-28T10:13:14.743Z"); 

Metodo 2

Il formato di ingresso è equivalente formato ISO_DATE_TIME dopo rimuovere 'Z' dalla data aaaa modello -MM-dd'T'HH: mm: ss.SSSZ

Poi possiamo analizzarlo usando ISO_DATE_TIME

text = "2015-06-28T10:13:14.743" 
LocalDateTime.parse(text,DateTimeFormatter.ISO_DATE_TIME)