Estoy tratando de comparar una fecha en formato String con la fecha actual. Así es como lo hice (no lo he probado, pero debería funcionar), pero estoy usando métodos obsoletos. ¿Alguna buena sugerencia de alternativa? Gracias.
PD: Realmente odio hacer cosas de Date en Java. Hay tantas formas de hacer lo mismo, que realmente no estás seguro de cuál es la correcta, de ahí mi pregunta aquí.
String valid_until = "1/1/1990";
Calendar cal = Calendar.getInstance();
SimpleDateFormat sdf = new SimpleDateFormat("dd/mm/yyyy");
Date strDate = sdf.parse(valid_until);
int year = strDate.getYear(); // this is deprecated
int month = strDate.getMonth() // this is deprecated
int day = strDate.getDay(); // this is deprecated
Calendar validDate = Calendar.getInstance();
validDate.set(year, month, day);
Calendar currentDate = Calendar.getInstance();
if (currentDate.after(validDate)) {
catalog_outdated = 1;
}
Calendar
,SimpleDateFormat
,Date
o 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 .Respuestas:
Tu código podría reducirse a
o
fuente
Puede usar compareTo ()
fuente
java.util.Date
,java.util.Calendar
yjava.text.SimpleDateFormat
ahora están legado, suplantados por los java.time clases. La mayor parte de la funcionalidad java.time se ha actualizado a Java 6 y Java 7 en el proyecto ThreeTen-Backport . Más adaptado para Android anterior (<26) en ThreeTenABP . Consulte Cómo utilizar ThreeTenABP… .Puede crear directamente un
Calendar
desde unDate
:fuente
Tenga en cuenta que el formato correcto es ("dd / MM / aaaa") antes de que funcione el código. "mm" significa minuts!
fuente
fuente
java.util.Date
,java.util.Calendar
yjava.text.SimpleDateFormat
ahora están legado, suplantados por los java.time clases. La mayor parte de la funcionalidad java.time se ha actualizado a Java 6 y Java 7 en el proyecto ThreeTen-Backport . Más adaptado para Android anterior (<26) en ThreeTenABP . Consulte Cómo utilizar ThreeTenABP… .devuelve verdadero .. y también puede verificar antes e igual con la ayuda de date.before y date.equal ..
fuente
Compara el tiempo representado por este Calendario con el representado por el Calendario dado.
Devuelve 0 si los tiempos de los dos Calendarios son iguales, -1 si el tiempo de este Calendario es anterior al otro, 1 si el tiempo de este Calendario es posterior al otro.
fuente
convierta la fecha en Calendario y haga sus cálculos allí. :)
O:
fuente
Es hora de la respuesta moderna.
java.time y ThreeTenABP
Cuando ejecuté este código hace un momento, el resultado fue:
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 darZoneOffset.UTC
siempre 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
,SimpleDateFormat
yDate
, están mal diseñados y afortunadamente siempre actualizado. Además, a pesar del nombreDate
, a no representa una fecha, sino un punto en el tiempo. Una consecuencia de esto es: aunque hoy es 15 de febrero de 2019, unDate
objeto recién creado ya está después (por lo que no es igual a) unDate
objeto del análisis15/02/2019
. Esto confunde a algunos. Contrariamente a esto, el modernoLocalDate
es una fecha sin hora del día (y sin zona horaria), por lo que dosLocalDate
s 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 .
org.threeten.bp
con subpaquetes.Enlaces
java.time
se describió por primera vez.java.time
Java 6 y 7 (ThreeTen para JSR-310).fuente
Podrías intentar esto
y podría utilizar
today.getTime()
para recuperar valor y comparar.fuente
A veces necesitamos hacer una lista con fechas, como
hoy con hora
ayer con ayer
otros días con 23/06/2017
Para hacer esto, necesitamos comparar la hora actual con nuestros datos.
También puede consultar este ejemplo en GitHub y esta publicación .
fuente
Actualización: La Joda-Time biblioteca se encuentra ahora en el modo de mantenimiento, y recomienda migrar a la java.time marco que tiene éxito. Vea la respuesta de Ole VV .
Joda-Time
Las clases java.util.Date y .Calendar son notoriamente problemáticas. Evítales. Utilice Joda-Time o el nuevo paquete java.time en Java 8.
LocalDate
Si desea solo fecha sin hora del día, use la clase LocalDate.
Zona horaria
Obtener la fecha actual depende de la zona horaria. Se acerca una nueva fecha en París antes de Montreal. Especifique la zona horaria deseada en lugar de depender del valor predeterminado de la JVM.
Ejemplo en Joda-Time 2.3.
fuente
Puede usar validDate.setTime (strDate) Eche un vistazo al javadoc en http://docs.oracle.com/javase/1.5.0/docs/api/java/util/Calendar.html
fuente
fuente
En Kotlin puedes comparar fechas fácilmente con operadores de comparación. Porque Kotlin ya soporta la sobrecarga de los operadores. Entonces, para comparar objetos de fecha:
y si está utilizando objetos de calendario, puede comparar fácilmente así:
fuente