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:
- Convertir milisegundo a Joda Fecha Hora o para zona 0000
- Jodatime cómo saber si el horario de verano está en
- Anular el primer día de la semana en joda?
- No se puede generar APK firmado con proguard habilitado cuando se usa Joda Time
- joda tiempo consumir demasiada memoria
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?
- Adición de Joda Time a Android Studio
- ¿Cómo clonar Joda DateTime?
- Añadiendo el tiempo de Joda
- Un ligero retraso al hacer clic en un botón
- Uso de la biblioteca Joda-Time para convertir la cadena al formato DateTime en Google Tasks API
- Tener problemas para conseguir Joda-tiempo para ejecutar en Android.
- Intervalo de tiempo límite en el selector de tiempo
- Hora de Joda y error de ProGuard al exportar .apk
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.
- Superscript and Subscript en la aplicación de Android XML
- Sube fotos de la aplicación de Android a Google Cloud Storage / App Engine – carácter ilegal '_'