variable tipo para obtener mes hora funciones formatos fecha dato año actual java date compatibility

tipo - Quiero obtener Año, Mes, Día, etc. desde la Fecha de Java para comparar con la fecha del Calendario Gregoriano en Java. es posible?



tipo de dato para hora en java (8)

Tengo un objeto Date en Java almacenado como el tipo de fecha de Java.

También tengo una fecha creada por el Calendario Gregoriano. La fecha del calendario gregoriano no tiene parámetros y, por lo tanto, es una instancia de la fecha (¿y hora?) De hoy.

Con la fecha de java, deseo poder obtener el año, mes, día, hora, minuto y segundos del tipo de fecha de java y comparar la fecha del calendario de gregoriano.

Vi que, en este momento, la fecha de Java se almacena como larga y los únicos métodos disponibles parecen simplemente escribir el largo como una cadena de fecha formateada. ¿Hay alguna forma de acceder a Año, mes, día, etc.?

Vi que los métodos getYear() , getMonth() , etc. para la clase Date se han desaprobado. Me preguntaba cuál es la mejor práctica para usar la instancia Java Date que tengo con la fecha GregorianCalendar .

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.


Con Java 8 y posterior, puede convertir el objeto Date en un objeto java.time.LocalDate y luego obtener fácilmente el año, el mes y el día.

Date date = new Date(); LocalDate localDate = date.toInstant().atZone(ZoneId.systemDefault()).toLocalDate(); int year = localDate.getYear(); int month = localDate.getMonthValue(); int day = localDate.getDayOfMonth();

Tenga en cuenta que getMonthValue() devuelve un valor int de 1 a 12.


O podrías hacer algo como esto. Explicará cómo funciona la clase "Fecha".

String currentDateString = "02/27/2012 17:00:00"; SimpleDateFormat sd = new SimpleDateFormat("MM/dd/yyyy HH:mm:ss"); Date currentDate = sd.parse(currentDateString); String yourDateString = "02/28/2012 15:00:00"; SimpleDateFormat yourDateFormat = new SimpleDateFormat( "MM/dd/yyyy HH:mm:ss"); Date yourDate = yourDateFormat.parse(yourDateString); if (yourDate.after(currentDate)) { System.out.println("After"); } else if(yourDate.equals(currentDate){ System.out.println("Same"); }else{ System.out.println("Before"); }


Puede ser más fácil

Date date1 = new Date("31-May-2017"); OR java.sql.Date date1 = new java.sql.Date((new Date()).getTime()); SimpleDateFormat formatNowDay = new SimpleDateFormat("dd"); SimpleDateFormat formatNowMonth = new SimpleDateFormat("MM"); SimpleDateFormat formatNowYear = new SimpleDateFormat("YYYY"); String currentDay = formatNowDay.format(date1); String currentMonth = formatNowMonth.format(date1); String currentYear = formatNowYear.format(date1);


Tenga cuidado al montar el inicio desde 0 en lugar de 1. Y también use el calendario pm como am para que tenga mucho cuidado cuando use Horas ans minutos.

Date your_date; Calendar cal = Calendar.getInstance(); cal.setTime(your_date); int year = cal.get(Calendar.YEAR); int month = cal.get(Calendar.MINUTE);


Use algo como:

Date date; // your date Calendar cal = Calendar.getInstance(); cal.setTime(date); int year = cal.get(Calendar.YEAR); int month = cal.get(Calendar.MONTH); int day = cal.get(Calendar.DAY_OF_MONTH); // etc.

Cuidado, los meses comienzan en 0, no en 1.

Editar : desde Java 8 es mejor usar java.time.LocalDate lugar de java.util.Calendar . Vea esta respuesta para saber cómo hacerlo.


Date date = new Date(); SimpleDateFormat simpleDateFormat = new SimpleDateFormat("EEEE"); System.out.println("DAY "+simpleDateFormat.format(date).toUpperCase()); simpleDateFormat = new SimpleDateFormat("MMMM"); System.out.println("MONTH "+simpleDateFormat.format(date).toUpperCase()); simpleDateFormat = new SimpleDateFormat("YYYY"); System.out.println("YEAR "+simpleDateFormat.format(date).toUpperCase());


@Test public void testDate() throws ParseException { long start = System.currentTimeMillis(); long round = 100000l; for (int i = 0; i < round; i++) { StringUtil.getYearMonthDay(new Date()); } long mid = System.currentTimeMillis(); for (int i = 0; i < round; i++) { StringUtil.getYearMonthDay2(new Date()); } long end = System.currentTimeMillis(); System.out.println(mid - start); System.out.println(end - mid); } public static Date getYearMonthDay(Date date) throws ParseException { SimpleDateFormat f = new SimpleDateFormat("yyyyyMMdd"); String dateStr = f.format(date); return f.parse(dateStr); } public static Date getYearMonthDay2(Date date) throws ParseException { Calendar c = Calendar.getInstance(); c.setTime(date); c.set(Calendar.SECOND, 0); c.set(Calendar.MINUTE, 0); c.set(Calendar.HOUR_OF_DAY, 0); return c.getTime(); } public static int compare(Date today, Date future, Date past) { Date today1 = StringUtil.getYearMonthDay2(today); Date future1 = StringUtil.getYearMonthDay2(future); Date past1 = StringUtil.getYearMonthDay2(past); return today.compare // or today.after or today.before }

getYearMonthDay2 (la solución de calendario) es diez veces más rápido. Ahora tienes aaaa MM dd 00 00 00, y luego compara usando date.compare


private boolean isSameDay(Date date1, Date date2) { Calendar calendar1 = Calendar.getInstance(); calendar1.setTime(date1); Calendar calendar2 = Calendar.getInstance(); calendar2.setTime(date2); boolean sameYear = calendar1.get(Calendar.YEAR) == calendar2.get(Calendar.YEAR); boolean sameMonth = calendar1.get(Calendar.MONTH) == calendar2.get(Calendar.MONTH); boolean sameDay = calendar1.get(Calendar.DAY_OF_MONTH) == calendar2.get(Calendar.DAY_OF_MONTH); return (sameDay && sameMonth && sameYear); }