Soy nuevo en Android y estoy tratando de obtener la fecha actual, pero el Android Calendar
clase requiere API 24. Me necesidad de apoyar dispositivo más antiguo y de la Time
clase está obsoleta desde la API 22.
El problema es cómo llegar a la fecha actual en la API de 23 años y lo resolvió mediante java.util.Calendar
el cual funciona en todas las versiones. Entonces, ¿qué debería utilizar, calendario Android o calendario de Java?
Tenga en cuenta que el día, el mes y el año son sólo números enteros cuando se utiliza el calendario de Android.
if (Build.VERSION.SDK_INT >= Build.VERSION_CODES.N) {
day =android.icu.util.Calendar.getInstance().get(android.icu.util.Calendar.DAY_OF_MONTH);
month = android.icu.util.Calendar.getInstance().get(android.icu.util.Calendar.MONTH);
year = android.icu.util.Calendar.getInstance().get(android.icu.util.Calendar.YEAR);
}
else {
day = java.util.Calendar.getInstance().get(java.util.Calendar.DAY_OF_MONTH);
month = java.util.Calendar.getInstance().get(java.util.Calendar.MONTH);
year = java.util.Calendar.getInstance().get(java.util.Calendar.YEAR);
}
Y cuando sólo se utiliza el calendario de Java que no hay necesidad de comprobar la versión de la API
day = java.util.Calendar.getInstance().get(java.util.Calendar.DAY_OF_MONTH);
month = java.util.Calendar.getInstance().get(java.util.Calendar.MONTH);
year = java.util.Calendar.getInstance().get(java.util.Calendar.YEAR);
tl; dr
Entonces, ¿qué debería utilizar, calendario Android o calendario de Java?
Ninguno.
Utilizar las modernas java.time clases. Disponible en el back-puerto para Android <26.
LocalDate.of( 2018 , Month.JANUARY , 23 )
Evitar las clases heredadas
En Java, la terrible java.util.Calendar
clase (y clases relacionadas, Date
etc.) se suplantaron hace años por los java.time clases. Ahora disponible en Android 26 y posteriores.
El ThreeTen-Backport biblioteca traer mosto de la java.time funcionalidad para Java 6 y 7 usando API prácticamente idénticos. Ese proyecto está adaptado además para Android <26 en el ThreeTenABP proyecto.
Recomiendo encarecidamente evitar las clases heredadas, en lugar de utilizar solamente las java.time clases. Estas clases modernas están definidas en JSR 310, y guiados por el mismo hombre que dirigió el líder en la industria Joda-Time biblioteca, Stephen Colebourne. Así que tienen un excelente diseño basado en muchos años de experiencia. Usando ThreeTenABP es bien vale la pena la molestia de añadir la biblioteca a su proyecto.
La fecha sólo, año-mes-día, sin un tiempo del día y sin una zona horaria, utilice la LocalDate
clase.
LocalDate ld = LocalDate.of( 2018 , 1 , 23 ) ;
O utilizar la mano Month
de enumeración para más legibilidad.
LocalDate ld = LocalDate.of( 2018 , Month.JANUARY , 23 ) ;
sobre java.time
El java.time marco está construido en Java 8 y versiones posteriores. Estas clases suplantar la vieja problemáticos heredados clases de fecha y hora como java.util.Date
, Calendar
, y SimpleDateFormat
.
La Joda-Time proyecto, ahora en modo de mantenimiento , asesora a la migración a los java.time clases.
Para obtener más información, consulte el Tutorial de Oracle . Y la búsqueda de desbordamiento de pila durante muchos ejemplos y explicaciones. Especificación es JSR 310 .
Es posible intercambiar java.time objetos directamente con su base de datos. Utilizar un controlador JDBC compatible con JDBC 4.2 o posterior. No hay necesidad de cadenas, sin necesidad de java.sql.*
clases.
Dónde obtener las clases java.time?
- Java SE 8 , Java SE 9 , Java SE 10 , Java SE 11 , y más tarde - Parte de la API estándar de Java con una aplicación incluida.
- Java 9 añade algunas características menores y correcciones.
- Java SE 6 y Java SE 7
- La mayor parte del java.time funcionalidad está de vuelta-portado a Java 6 y 7 en ThreeTen-Backport .
- Androide
- Las versiones posteriores de Android de haces de implementaciones de los java.time clases.
- Para anteriormente Android (<26), el ThreeTenABP proyecto adapta ThreeTen-Backport (mencionado anteriormente). Ver Cómo utilizar ThreeTenABP ... .