JodaTime no reconoce algunas zonas horarias de Android

Estoy usando JodaTime en mi aplicación y estoy recibiendo informes de la consola de desarrolladores sobre fallos como éste:

java.lang.RuntimeException: Unable to resume activity {com.myapp.app/Home}: java.lang.IllegalArgumentException: The datetime zone id 'Africa/Abuja' is not recognised .... Caused by: java.lang.IllegalArgumentException: The datetime zone id 'Africa/Abuja' is not recognised at org.joda.time.DateTimeZone.forTimeZone(DateTimeZone.java:337) ... 

Estoy usando esta línea de código para obtener el Timezone:

 DateTimeZone tz = DateTimeZone.forTimeZone(TimeZone.getDefault()); 

Curiosamente, la mayoría de los accidentes son Africa/**** .

TimeZone.getDefault() forma parte de la API de Android, por lo que asumí que devolvería identificadores de zona horaria utilizables.

¿Hay algo que pueda hacer con estas zonas horarias para poder usarlas correctamente? ¿Se trata de un problema conocido con Android y Joda Time?

Utilice esta versión de Joda adaptada para Android: https://github.com/dlew/joda-time-android

Luego, ejecute JodaTimeAndroid.init(this); En la aplicación onCreate su aplicación (está en su documentación), y voilà, sólo funciona , todos los onCreate son reconocidos.

La zona "África / Abuja" no es un identificador de zona horaria válido en IANA-tz-base de datos utilizando identificadores Olson (nombrado por el inventor Arthur David Olson). En su lugar, el identificador de zona válido es en este caso "África / Lagos".

También debe tener en cuenta que JodaTime sigue IANA (busque la versión más joven allí, también) y que Android tiene una base de datos tz-home diferente que puede utilizar diferentes identificadores de zona horaria. Según este android-api-link Android es compatible con Olson-tz-identificadores. No estoy muy seguro de por qué utiliza "África / Abuja" en absoluto resp. Por qué esto será válido. ¿Está contenido en TimeZone.getAvailableIDs() ?

Si algo extraño en la configuración de Android causa TimeZone.getDefault() con "Africa / Abuja", entonces podría intentar establecer la propiedad del sistema "user.timezone" en "Africa / Lagos". JodaTime primero verá esta propiedad.

  • En Java, cómo obtener cadenas de días de la semana (Sun, Mon, ..., Sat) con el sistema de configuración por defecto (idioma)
  • Android: Proguard no compiló con el archivo jar de Joda Time
  • Joda Time en Eclipse: NoClassDefFoundError
  • Encuentre el día y la hora restante usando jodatime
  • Jodatime inicio del día y fin del día
  • Separar horas de minutos en un valor de tiempo dado
  • Sólo algunos usuarios informan del error "Recurso no encontrado". ¿Esto tiene sentido?
  • ProGuard no compiló con Joda Time utilizado en Windows
  • Android java.lang.NoClassDefFoundError utilizando las bibliotecas JODA
  • Gradle duplicar archivos durante el embalaje - messages.properties de JodaTime
  • Cómo obtener el formato de fecha de configuración regional en mes y día
  • FlipAndroid es un fan de Google para Android, Todo sobre Android Phones, Android Wear, Android Dev y Aplicaciones para Android Aplicaciones.