¿Cuál es el formato de hora para esta "fecha": "2014-08-20 00:00:00 -0500"?

He intentado convertir esta fecha de la siguiente manera:

SimpleDateFormat fromFormat = new SimpleDateFormat("yyyy-MM-dd HH:mm:ss SSSZ"); 

pero tengo:

  java.text.ParseException: Unparseable date: "2014-09-20 00:00:00 -0500" (at offset 20) 

Ese "-0500" es el offset de UTC, en formato RFC822. Usted sólo quiere Z , sin el SSS .

Los documentos Android SimpleDateFormat tienen así en la tabla:

  • Símbolo: Z
  • Significado: zona horaria (RFC 822)
  • Tipo: (Zona horaria)
  • Ejemplo: Z/ZZ/ZZZ : -0800 ZZZZ : GMT-08: 00 ZZZZZ : -08: 00

Yo también personalmente especificar una configuración regional, como una cuestión de curso: este es un formato legible por máquina en lugar de un formato orientado a humanos, por lo que normalmente se especifica Locale.US :

 SimpleDateFormat format = new SimpleDateFormat("yyyy-MM-dd HH:mm:ss Z", Locale.US); String text = "2014-08-20 00:00:00 -0500"; System.out.println(format.parse(text)); 

La respuesta de Jon Skeet es correcta.

Formato estándar de fecha y hora

He aquí un ejemplo de código que muestra cómo transformar su cadena en conformidad con ISO 8601 .

 String inputRaw = "2014-08-20 00:00:00 -0500"; String input = inputRaw.replaceFirst( " ", "T" ).replaceFirst( " ", "" ); // Replace first SPACE with a 'T', and delete second SPACE. // input is "2014-08-20T00:00:00-0500". 

Joda-Time

Puede pasar esa cadena compatible directamente al constructor de DateTime en Joda-Time . Ditto para el equivalente en el paquete java.time en Java 8 (inspirado en Joda-Time).

 DateTimeZone timeZone = DateTimeZone.forID( "America/Montreal" ); // Specify it rather than have JVM's default applied. DateTime dateTimeMontréal = new DateTime( input, timeZone ); DateTime dateTimeUtc = dateTimeMontréal.withZone( DateTimeZone.UTC ); 

Descarga en la consola.

 System.out.println( "inputRaw: " + inputRaw ); System.out.println( "input: " + input ); System.out.println( "dateTimeMontréal: " + dateTimeMontréal ); System.out.println( "dateTimeUtc: " + dateTimeUtc ); 

Cuando se ejecuta …

 inputRaw: 2014-08-20 00:00:00 -0500 input: 2014-08-20T00:00:00-0500 dateTimeMontréal: 2014-08-20T01:00:00.000-04:00 dateTimeUtc: 2014-08-20T05:00:00.000Z 
  • Cómo deshacerse de la advertencia: Utilice '$' en lugar de '.' Para clases internas en Eclipse
  • Permitir que sólo mis aplicaciones Android ejecuten api de punto final en java
  • Android: howto parse URL String con espacios al objeto URI?
  • Tipo de excepción no controlada JSONException
  • Problema nulo con NeighboringCellInfo, CID y LAC
  • ¿Por qué no aparece mi brindis?
  • NullPointerException getDefaultSharedPreferences ()
  • Variables de miembro vs setArguments en Fragments
  • Cómo agregar classpath en un proyecto de Android Studio
  • Ordenar arraylist de cadena en android
  • Android - ¿Cómo almacenar certificado en keystore mediante programación?
  • FlipAndroid es un fan de Google para Android, Todo sobre Android Phones, Android Wear, Android Dev y Aplicaciones para Android Aplicaciones.