2012-08-30 14 views
5

Usando la biblioteca de la versión joda-time-2.0, me preguntaba, cuál de estas funciones es mejor construir a partir de una fecha ISO (XML supuesto xs:dateTime formato): new DateTime(String) versus DateTime.parse(String).joda-time: new DateTime (String) vs DateTime.parse (String)

Porque ambos devuelven un resultado diferente del mismo valor. Ejemplo:

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

Resultando diferente debido a la ISOChronology. Primero dice que es ISOChronology[Europe/Paris] y segundo ISOChronology[UTC], aunque milisegundos son los mismos.

Además, here recomienda usar ISODateTimeFormat.dateTimeNoMillis(), dando el mismo resultado que con la primera versión (new).

+0

¿Cuál es la pregunta? – Ilya

+1

¿Qué versión estás usando? –

+0

@Ilya editó la pregunta en negrita. Aunque creo que fue una pregunta muy clara ... – lucasvc

Respuesta

12

Los dos métodos utilizan dos métodos de conversión diferentes: el constructor utiliza una instancia de InstantConverter, que en el caso de cadenas es un StringConverter y que todavía no apoyar la lectura de la zona horaria de la cadena pasada, mientras que el método utiliza una parseDateTimeFormatter que sabe cómo analizar la zona horaria.

Aunque, en teoría, ambos formatos aceptan un formato de fecha y hora ISO, considero que el constructor tiene fallas ya que siempre usa la zona horaria del sistema en lugar de la especificada en la cadena. Esto es inconsistente con los otros valores posibles aceptados por este constructor, que sí tienen en cuenta una cronología con su desplazamiento de zona horaria. Por ejemplo, este constructor devolverá un objeto DateTime con la zona horaria UTC:

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

Entonces, es mejor usar 'DateTime.parse', ¿verdad? – lucasvc

+0

¿El constructor está realmente molesto o la zona horaria es ignorada por diseño? – Scorpio

+0

Dado que la zona horaria no se ignora si en lugar de una cadena pasamos otro objeto JodaTime que tiene una zona horaria, diría que es un error, pero debe ser confirmado por un desarrollador JodaTime. –

Cuestiones relacionadas