Es hora de la respuesta moderna.
java.time y ThreeTenABP
DateTimeFormatter dateFormatter = DateTimeFormatter.ofPattern("d/M/u");
String validUntil = "1/1/1990";
LocalDate validDate = LocalDate.parse(validUntil, dateFormatter);
LocalDate currentDate = LocalDate.now(ZoneId.of("Pacific/Efate"));
if (currentDate.isAfter(validDate)) {
System.out.println("Catalog is outdated");
}
Cuando ejecuté este código hace un momento, el resultado fue:
El catálogo está desactualizado
Dado que nunca es la misma fecha en todas las zonas horarias, proporcione una zona horaria explícita a LocalDate.now. Si desea que el catálogo expire a la misma hora en todas las zonas horarias, puede dar ZoneOffset.UTCsiempre que les informe a los usuarios que está utilizando UTC.
Estoy usando java.time, la API moderna de fecha y hora de Java. Las clases de fecha y hora que se utilizan, Calendar, SimpleDateFormaty Date, están mal diseñados y afortunadamente siempre actualizado. Además, a pesar del nombre Date, a no representa una fecha, sino un punto en el tiempo. Una consecuencia de esto es: aunque hoy es 15 de febrero de 2019, un Dateobjeto recién creado ya está después (por lo que no es igual a) un Dateobjeto del análisis 15/02/2019. Esto confunde a algunos. Contrariamente a esto, el moderno LocalDatees una fecha sin hora del día (y sin zona horaria), por lo que dos LocalDates que representan la fecha de hoy siempre serán iguales.
Pregunta: ¿Puedo usar java.time en Android?
Sí, java.time funciona bien en dispositivos Android antiguos y nuevos. Solo requiere al menos Java 6 .
- En Java 8 y posteriores y en los dispositivos Android más nuevos (desde el nivel de API 26), la API moderna viene incorporada.
- En Java 6 y 7, obtenga ThreeTen Backport, el backport de las clases modernas (ThreeTen para JSR 310; consulte los enlaces en la parte inferior).
- En Android (más antiguo), use la edición de Android de ThreeTen Backport. Se llama ThreeTenABP. Y asegúrese de importar las clases de fecha y hora desde
org.threeten.bpcon subpaquetes.
Enlaces
Calendar,SimpleDateFormat,Dateo cualquiera de las otras clases de fecha y hora de Java anticuadas largas. En su lugarjava.time, utilice la API moderna de fecha y hora de Java . Sí, puedes usarlo en Android. Para Android anterior, consulte Cómo usar ThreeTenABP en un proyecto de Android .