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)
- Android Studio: No se pudo crear MD5 HashFile
- Compruebe si una cadena es un número
- Dalvik VM vs Sun JVM
- Eclipse no reconoce el objeto Display
- Android - Enmascarar un mapa de bits con otro mapa de bits
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"; }
- Diseño de cuadrícula de botones 2x2
- ¿Cómo obtener el punto real cuando toco en la pantalla?
- Bloqueo de orientación en android mediante programación
- Establecer windowTranslucentStatus = true cuando android lollipop o superior
- Org.json.JSONArray no se puede convertir a JSONObject
- Excepción al usar ksoap2-android
- Expresión regular de Android: devuelve la cadena correspondiente
- Visualización de texto (como puntuación) que cambia en cada fotograma
¿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)
- ¿Cómo controlar el volumen de los medios?
- Reducir tamaño de mapa de bits a algunos píxeles especificados en Android