Revise la fecha con la fecha de hoy

He escrito algún código para comprobar dos fechas, una fecha de inicio y una fecha de finalización. Si la fecha de finalización es anterior a la fecha de inicio, aparecerá un mensaje que indica que la fecha de finalización es anterior a la fecha de inicio.

También quiero añadir un cheque si la fecha de inicio es antes de hoy (hoy como en el día en que el usuario usa la aplicación) ¿Cómo haría esto? (Código del inspector de la fecha abajo, también todo esto se escribe para androide si eso tiene cualquier cojinete)

if(startYear > endYear) { fill = fill + 1; message = message + "End Date is Before Start Date" + "\n"; } else if(startMonth > endMonth && startYear >= endYear) { fill = fill + 1; message = message + "End Date is Before Start Date" + "\n"; } else if(startDay > endDay && startMonth >= endMonth && startYear >= endYear) { fill = fill + 1; message = message + "End Date is Before Start Date" + "\n"; } 

¿Ayuda esto?

 Calendar c = Calendar.getInstance(); // set the calendar to start of today c.set(Calendar.HOUR_OF_DAY, 0); c.set(Calendar.MINUTE, 0); c.set(Calendar.SECOND, 0); c.set(Calendar.MILLISECOND, 0); // and get that as a Date Date today = c.getTime(); // or as a timestamp in milliseconds long todayInMillis = c.getTimeInMillis(); // user-specified date which you are testing // let's say the components come from a form or something int year = 2011; int month = 5; int dayOfMonth = 20; // reuse the calendar to set user specified date c.set(Calendar.YEAR, year); c.set(Calendar.MONTH, month); c.set(Calendar.DAY_OF_MONTH, dayOfMonth); // and get that as a Date Date dateSpecified = c.getTime(); // test your condition if (dateSpecified.before(today)) { System.err.println("Date specified [" + dateSpecified + "] is before today [" + today + "]"); } else { System.err.println("Date specified [" + dateSpecified + "] is NOT before today [" + today + "]"); } 

No lo complices tanto. Utilice esta manera fácil. Importar DateUtils clase java y llamar a los siguientes métodos que devuelve un booleano.

 DateUtils.isSameDay(date1,date2); DateUtils.isSameDay(calender1,calender2); DateUtils.isToday(date1); 

Para más información, consulte este artículo DateUtils Java

Utilizando Joda Time esto puede simplificarse para:

 DateMidnight startDate = new DateMidnight(startYear, startMonth, startDay); if (startDate.isBeforeNow()) { // startDate is before now // do something... } 

Para comprobar si una fecha es la fecha de hoy o no sólo comprobar fechas no tiempo incluido con que así que hagan tiempo 00:00:00 y usar el código de abajo

  Calendar c = Calendar.getInstance(); // set the calendar to start of today c.set(Calendar.HOUR_OF_DAY, 0); c.set(Calendar.MINUTE, 0); c.set(Calendar.SECOND, 0); c.set(Calendar.MILLISECOND, 0); Date today = c.getTime(); // or as a timestamp in milliseconds long todayInMillis = c.getTimeInMillis(); int dayOfMonth = 24; int month = 4; int year =2013; // reuse the calendar to set user specified date c.set(Calendar.YEAR, year); c.set(Calendar.MONTH, month - 1); c.set(Calendar.DAY_OF_MONTH, dayOfMonth); c.set(Calendar.HOUR_OF_DAY, 0); c.set(Calendar.MINUTE, 0); c.set(Calendar.SECOND, 0); c.set(Calendar.MILLISECOND, 0); // and get that as a Date Date dateSpecified = c.getTime(); // test your condition if (dateSpecified.before(today)) { Log.v(" date is previou") } else if (dateSpecified.equal(today)) { Log.v(" date is today ") } else if (dateSpecified.after(today)) { Log.v(" date is future date ") } 

Espero que ayude ….

Las otras respuestas ignoran la cuestión crucial de la zona horaria .

Las otras respuestas utilizan clases anticuadas.

Evitar viejas clases de fecha y hora

Las viejas clases de fecha y hora empacadas con las primeras versiones de Java están mal diseñadas, confusas y problemáticas. Evite java.util.Date/.Calendar y clases relacionadas.

Java.time

  • En Java 8 y posterior utilice el marco java.time integrado . Vea Tutorial .
  • En Java 7 o 6, agregue el backport de java.time a su proyecto.
  • En Android , utilice la versión envuelta de ese backport .

LocalDate

Para valores de fecha única, sin hora del día y sin zona horaria, utilice la clase LocalDate .

 LocalDate start = LocalDate.of( 2016 , 1 , 1 ); LocalDate stop = start.plusWeeks( 1 ); 

Zona horaria

Tenga en cuenta que mientras LocalDate no almacena una zona horaria, determinar una fecha como "hoy" requiere una zona horaria. Para un momento dado, la fecha puede variar alrededor del mundo por zona horaria. Por ejemplo, un nuevo día amanece antes en París que en Montreal. Un momento después de la medianoche en París sigue siendo "ayer" en Montreal.

Si todo lo que tienes es un offset de UTC , use ZoneOffset . Si tiene una zona horaria completa (continente / región), utilice ZoneId . Si desea UTC, utilice la práctica constante ZoneOffset.UTC .

 ZoneId zoneId = ZoneId.of( "America/Montreal" ); LocalDate today = LocalDate.now( zoneId ); 

La comparación es fácil con los isEqual , isBefore y isAfter .

 boolean invalidInterval = stop.isBefore( start ); 

Podemos comprobar si hoy está contenido dentro de este intervalo de fechas. En mi lógica mostrada aquí utilizo el acercamiento semi-abierto donde el principio es inclusivo mientras que el final es exclusivo . Este enfoque es común en el trabajo de fecha y hora. Así, por ejemplo, una semana va desde el lunes hasta el lunes siguiente, pero no incluido.

 // Is today equal or after start (not before) AND today is before stop. boolean intervalContainsToday = ( ! today.isBefore( start ) ) && today.isBefore( stop ) ) ; 

Interval

Si está trabajando extensamente con tales períodos de tiempo, considere la adición de la biblioteca ThreeTen-Extra a su proyecto. Esta biblioteca amplía el marco java.time y es el terreno probatorio para posibles adiciones a java.time.

ThreeTen-Extra incluye una clase Interval con métodos útiles como abuts , contains , encloses , overlaps , etc.

Supongo que está utilizando enteros para representar su año, mes y día? Si desea permanecer coherente, utilice los métodos Date.

 Calendar cal = new Calendar(); int currentYear, currentMonth, currentDay; currentYear = cal.get(Calendar.YEAR); currentMonth = cal.get(Calendar.MONTH); currentDay = cal.get(Calendar.DAY_OF_WEEK); if(startYear < currentYear)      {        message = message + "Start Date is Before Today" + "\n";      }    else if(startMonth < currentMonth && startYear <= currentYear)        {          message = message + "Start Date is Before Today" + "\n";        }    else if(startDay < currentDay && startMonth <= currentMonth && startYear <= currentYear)          {            message = message + "Start Date is Before Today" + "\n";          } 

Otra forma de realizar esta operación:

 public class TimeUtils { /** * @param timestamp * @return */ public static boolean isToday(long timestamp) { Calendar now = Calendar.getInstance(); Calendar timeToCheck = Calendar.getInstance(); timeToCheck.setTimeInMillis(timestamp); return (now.get(Calendar.YEAR) == timeToCheck.get(Calendar.YEAR) && now.get(Calendar.DAY_OF_YEAR) == timeToCheck.get(Calendar.DAY_OF_YEAR)); } } 
  boolean isBeforeToday(Date d) { Date today = new Date(); today.setHours(0); today.setMinutes(0); today.setSeconds(0); return d.before(today); } 

Prueba esto:

 public static boolean isToday(Date date) { return org.apache.commons.lang3.time.DateUtils.isSameDay(Calendar.getInstance().getTime(),date); } 

Android ya tiene una clase dedicada para esto. Compruebe DateUtils.isToday (largo cuándo)

  • Android Thread.start () CalledFromWrongThreadException
  • cómo actualizar la variable textview cada 5 segundos
  • Cómo utilizar FFT para filtrar un ruido de 50Hz de una matriz de datos?
  • Picasso carga de imagen de devolución de llamada
  • Ocultar teclado cuando se envía una búsqueda o se elige una sugerencia de búsqueda
  • ¿Puedo "usar" Java 8 con Android Development ahora?
  • Cómo utilizar getChats en tdlib
  • Android Spinner utilizando ArrayList <String>
  • ¿Cómo acceder a "Activity.this" en Kotlin?
  • Configuración del paquete de soporte de Android v7 para eclipse - GridLayout
  • Cómo hacer los métodos en beanshell?
  • FlipAndroid es un fan de Google para Android, Todo sobre Android Phones, Android Wear, Android Dev y Aplicaciones para Android Aplicaciones.