检查date与今天的date

我写了一些代码来检查两个date,开始date和结束date。 如果结束date在开始date之前,则会提示结束date在开始date之前。

我也想添加一个检查开始date是否在今天之前(今天在用户使用应用程序的那一天)如何做到这一点? (date检查代码下面,也是所有这是为Android写的,如果有任何方位)

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 "检查date与今天的date"

这有帮助吗?

 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

使用乔达时间,这可以简化为:

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

检查一个date是否是今天的date或只检查date不包括那个时间所以腾出时间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 ") } 

希望它会帮助….

  boolean isBeforeToday(Date d) { Date today = new Date(); today.setHours(0); today.setMinutes(0); today.setSeconds(0); return d.before(today); } 

其他答案忽略了时区的关键问题。

其他答案使用过时的类。

避免旧的date时间课程

与最早版本的Java捆绑在一起的旧date时间类别devise不佳,混乱且麻烦。 避免java.util.Date/.Calendar和相关的类。

java.time

  • 在Java 8和更高版本中使用内置的java.time框架。 参见教程 。
  • 在Java 7或6中,将java.time的backport添加到您的项目中。
  • 在Android中 ,使用该回送的包装版本 。

LocalDate

对于仅限date的值,不使用时间和时区,请使用LocalDate类。

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

时区

请注意,虽然LocalDate存储时区,但确定诸如“today”之类的date需要一个时区。 在任何特定时刻,date可能因时区而异。 例如,巴黎之前的一个新的一天比蒙特利尔早。 在巴黎的午夜之后,在蒙特利尔仍然是“昨天”。

如果您所拥有的只是UTC的偏移量 ,请使用ZoneOffset 。 如果您有全时区(大陆/地区),请使用ZoneId 。 如果你想要UTC,使用便利的常量ZoneOffset.UTC

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

isEqualisBeforeisAfter方法比较容易。

 boolean invalidInterval = stop.isBefore( start ); 

我们可以检查今天是否包含在这个date范围内。 在我这里显示的逻辑中,我使用半开放方法,其中开始是包容性的,而结尾是排他性的 。 这种方法在date时间工作中很常见。 因此,例如,一个星期从星期一开始,但不包括下一个星期一。

 // 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的一个certificate基础。

ThreeTen-Extra包含一个Interval类,具有方便的方法,例如abutscontainsenclosesoverlaps等等。

我假设你用整数来表示你的年,月,日? 如果你想保持一致,使用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)); } } 

Android已经有一个专门的课程。 检查DateUtils.isToday(长的时候)

尝试这个:

 public static boolean isToday(Date date) { return org.apache.commons.lang3.time.DateUtils.isSameDay(Calendar.getInstance().getTime(),date); } 
 public static boolean isToday(Date date){ Calendar today = Calendar.getInstance(); Calendar specifiedDate = Calendar.getInstance(); specifiedDate.setTime(date); return today.get(Calendar.DAY_OF_MONTH) == specifiedDate.get(Calendar.DAY_OF_MONTH) && today.get(Calendar.MONTH) == specifiedDate.get(Calendar.MONTH) && today.get(Calendar.YEAR) == specifiedDate.get(Calendar.YEAR); }