Дата заезда с сегодняшней датой

Я написал код для проверки двух дат, даты начала и даты окончания. Если конечная дата предшествует дате начала, она выдаст подсказку, в которой говорится, что дата окончания – до даты начала.

Я также хочу добавить чек, если дата начала до сегодняшнего дня (сегодня, как в день, когда пользователь использует приложение). Как бы я это сделал? (Код проверки даты ниже, также все это написано для андроида, если оно имеет какое-либо оповещение)

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"; } 

Solutions Collecting From Web of "Дата заезда с сегодняшней датой"

Помогает ли это?

 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 + "]"); } 

Не слишком усложняйте это. Используйте этот простой способ. Импортируйте DateUtils java класс и вызовите следующие методы, которые возвращают логическое значение.

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

Для получения дополнительной информации см. Статью DateUtils Java

Используя Joda Time, это можно упростить:

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

Чтобы проверить, соответствует ли дата сегодняшней дате, или не только проверять даты, не включенные в это время, так что время 00:00:00 и использовать код ниже

  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 ") } 

Надеюсь, это поможет ….

Другие ответы игнорируют решающую проблему часового пояса .

Другие ответы используют устаревшие классы.

Избегайте старых классов времени

Старые классы даты и времени, в комплекте с самыми ранними версиями Java, плохо разработаны, запутываются и хлопотны. Избегайте java.util.Date/.Calendar и связанных классов.

java.time

  • В Java 8 и более поздних версиях используется встроенная инфраструктура java.time . См. Учебник .
  • В Java 7 или 6 добавьте backport java.time в свой проект.
  • В Android используйте завернутую версию этого backport .

LocalDate

Для значений даты, без времени и без часового пояса, используйте класс LocalDate .

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

Часовой пояс

Имейте в LocalDate что, хотя LocalDate не хранит часовой пояс, для определения даты, такой как «сегодня», требуется часовой пояс. В любой данный момент дата может меняться во всем мире по часовому поясу. Например, в Париже новый день предстает перед Парижем, чем в Монреале. Момент после полуночи в Париже все еще «вчера» в Монреале.

Если все, что у вас есть, это смещение-от-UTC , используйте ZoneOffset . Если у вас есть полный часовой пояс (континент / регион), используйте ZoneId . Если вы хотите UTC, используйте ZoneOffset.UTC константу ZoneOffset.UTC .

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

Сравнение легко с isEqual , isBefore , и isAfter методы.

 boolean invalidInterval = stop.isBefore( start ); 

Мы можем проверить, содержится ли сегодня в пределах этого диапазона дат. В моей логике, показанной здесь, я использую метод Half-Open, где начало включено, в то время как окончание является эксклюзивным . Этот подход распространен в работе с датой. Так, например, неделя проходит с понедельника, следующего, но не включая следующий понедельник.

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

Interval

Если вы работаете с такими промежутками времени, подумайте над тем, чтобы добавить в проект проект библиотеки ThreeTen-Extra . Эта библиотека расширяет рамки java.time и является доказательством возможных дополнений к java.time.

ThreeTen-Extra включает в себя класс Interval с удобными методами, такими как abuts , contains , encloses , overlaps и т. Д.

Я предполагаю, что вы используете целые числа для представления своего года, месяца и дня? Если вы хотите оставаться последовательным, используйте методы 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";          } 

Другой способ сделать эту операцию:

 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); } 

Попробуй это:

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

У Android уже есть специальный класс для этого. Проверить DateUtils.isToday (долго, когда)