2012-08-30 23 views
5

Utilizzando la libreria di versione joda-time-2.0, mi chiedevo, quale di queste funzioni è meglio costruire da una data ISO (su richiesta XML xs:dateTime formato): new DateTime(String) versus DateTime.parse(String).joda-time: new DateTime (String) vs DateTime.parse (String)

Poiché entrambi restituiscono un risultato diverso dallo stesso valore. Esempio:

new DateTime("2012-08-16T07:22:05Z") 
DateTime.parse("2012-08-16T07:22:05Z") 

Risultato diverso a causa dell'ISOChronology. Prima dice è ISOChronology[Europe/Paris] e il secondo ISOChronology[UTC], anche se i millisecondi sono gli stessi.

Inoltre, here consiglia l'uso di ISODateTimeFormat.dateTimeNoMillis(), dando lo stesso risultato dell'utilizzo della prima versione (new).

+0

Qual è la domanda? – Ilya

+1

Quale versione stai usando? –

+0

@Ilya ha modificato la domanda in grassetto. Anche se pensavo che fosse una domanda cristallina ... – lucasvc

risposta

12

I due metodi utilizzano due diversi metodi di conversione: il costruttore utilizza un'istanza di InstantConverter, che in caso di stringhe è un StringConverter e che non supporta ancora leggendo il fuso orario dalla stringa passata, mentre il metodo utilizza un parseDateTimeFormatter che sa come analizzare il fuso orario.

Sebbene in teoria entrambi i formati accettano un formato datetime ISO, ritengo che il costruttore sia bacato dal momento che utilizza sempre il fuso orario del sistema anziché quello specificato nella stringa. Questo è incoerente con gli altri possibili valori accettati da questo costruttore, che tengono conto di una cronologia con il suo offset del fuso orario. Ad esempio, questo costruttore restituirà un oggetto DateTime con il fuso orario UTC:

new DateTime(DateTime.parse("2012-08-16T07:22:05Z")) 
+0

Quindi, è meglio usare 'DateTime.parse', giusto? – lucasvc

+0

Il costruttore è veramente disturbato o il fuso orario è ignorato dalla progettazione? – Scorpio

+0

Poiché il fuso orario non viene ignorato se al posto di una stringa passiamo un altro oggetto JodaTime che ha un fuso orario, direi che è un bug, ma dovrebbe essere confermato da uno sviluppatore JodaTime. –