Tengo un objeto Date en Java almacenado como tipo de fecha de Java.
También tengo una fecha de creación del calendario gregoriano. La fecha del calendario gregoriano no tiene parámetros y, por lo tanto, es una instancia de la fecha (¿y la hora?) De hoy.
Con la fecha de Java, quiero poder obtener el año, mes, día, hora, minuto y segundos del tipo de fecha de Java y comparar la fecha del calendario gregoriano.
Vi que en este momento la fecha de Java se almacena como una larga y los únicos métodos disponibles parecen simplemente escribir la larga como una cadena de fecha formateada. ¿Hay alguna forma de acceder a Año, mes, día, etc.?
Vi que los getYear()
, getMonth()
métodos, etc., para Date
han sido desaprobados clase. Me preguntaba cuál es la mejor práctica para usar la instancia de Java Date que tengo con la GregorianCalendar
fecha.
Mi objetivo final es hacer un cálculo de fecha para poder verificar que la fecha de Java esté dentro de tantas horas, minutos, etc. de la fecha y hora de hoy.
Todavía soy un novato en Java y estoy un poco desconcertado por esto.
fuente
Date.getYear()
. Sufre de problemas (que no sé).Date.getYear()
Una vez analicé mi fecha el 30/06/2017 y devolvió mi año como 117. Vea dónde aterrizó, hace dos mil años. Pero cuando imprimo simplemente el objeto de fecha, la salida estaba bien, pero noDate.getYear();
.Respuestas:
Use algo como:
Cuidado, los meses comienzan en 0, no en 1.
Editar : desde Java 8 es mejor usar java.time.LocalDate en lugar de java.util.Calendar . Vea esta respuesta para saber cómo hacerlo.
fuente
cal.add(Calendar.DAY_OF_MONTH, -48)
para hacer aritmética diurna en objetos de calendario. Y puede comparar dos objetos de calendario usandocal.compareTo(anotherCal)
.Con Java 8 y versiones posteriores, puede convertir el objeto Date en un objeto LocalDate y luego obtener fácilmente el año, el mes y el día.
Tenga en cuenta que
getMonthValue()
devuelve un valor int de 1 a 12.fuente
LocalDate
Java 8 es la mejor solución que le ahorra tiempo, usar otra soluciónCalendar
yDate
está lleno de problemas.Podrías hacer algo como esto, explicará cómo funciona la
Date
clase.fuente
mm
indica minutos, en mayúsculaMM
significa mes del año.EDITAR: La salida para
date
=Fri Jun 15 09:20:21 CEST 2018
es:fuente
fuente
fuente
java.util.Date
,java.util.Calendar
yjava.text.SimpleDateFormat
ahora son heredadas , suplantadas por las clases java.time integradas en Java 8 y posteriores. Ver Tutorial de Oracle .getYearMonthDay2 (la solución de calendario) es diez veces más rápido. Ahora tiene aaaa MM dd 00 00 00, y luego compare usando date.compare
fuente
Puede ser más fácil
fuente
Montar con cuidado comenzar desde 0 no 1. Y también usar calendario como pm, así que tenga mucho cuidado cuando use horas y minutos.
fuente