检查我的日历日期参数是当前日期

时间:2012-12-21 05:47:58

标签: java date

我只想找到日期参数是当前日期(yyyy-MM-dd)而不使用simpledateformater或任何日期来字符串转换然后找到等于。

specifiedDate=2012-12-20
currentDate=2012-12-21

specifiedDate == currentDate

很简单我不想在验证时不包括时间(即HH:mm:S)

我尝试了类似

的内容
public boolean isCurrentDate(Calendar date){
 Calendar currentDate = Calendar.getInstance().getTime();
 if (currentDate.getDate()==(date.getTime().getDate()) 
            && currentDate.getMonth()==(date.getTime().getMonth())  
            && currentDate.getYear()==(date.getTime().getYear()) )
 {
  return true;
 }

 return false;
}

请建议一个更好的方法,或者是否有任何图书馆可用于此!!

6 个答案:

答案 0 :(得分:2)

如果您只想

,请尝试此操作

1)使用字符串

String s1 = new String("2012-01-27");
String s2 = new String("2011-01-28");
System.out.println(s1.compareTo(s2));

如果s1在词典方式上比s2“更大”,结果将为TRUE,这就是你需要的。要获得更多信息,请阅读compareTo()方法的javadoc。

2)使用Joda时间

使用Joda Time lib可以实现如下

DateTime first = ...;
DateTime second = ...;

LocalDate firstDate = first.toLocalDate();
LocalDate secondDate = second.toLocalDate();

return firstDate.compareTo(secondDate);

我更喜欢第二个选项

答案 1 :(得分:2)

比较之前将时间字段设置为0

currentDate.set(Calendar.HOUR_OF_DAY, 0);  
currentDate.set(Calendar.MINUTE, 0);  
currentDate.set(Calendar.SECOND, 0);  
currentDate.set(Calendar.MILLISECOND, 0); 

答案 2 :(得分:1)

您的上一行&& currentDate.getYear()==(date.getMonth()) )似乎是在比较年份和月份,而不是年份和年份。这可能是你的问题吗?

答案 3 :(得分:1)

如果您使用的是日历

public static boolean isSameDay(Calendar cal1, Calendar cal2) {
            if (cal1 == null || cal2 == null) {
                throw new IllegalArgumentException("The dates must not be null");
            }
            return (cal1.get(Calendar.ERA) == cal2.get(Calendar.ERA) &&
                    cal1.get(Calendar.YEAR) == cal2.get(Calendar.YEAR) &&
                    cal1.get(Calendar.DAY_OF_YEAR) == cal2.get(Calendar.DAY_OF_YEAR));
        }



public static boolean isToday(Calendar cal) {
        return isSameDay(cal, Calendar.getInstance());
    }

如果您使用日期

public static boolean isSameDay(Date date1, Date date2) {
        if (date1 == null || date2 == null) {
            throw new IllegalArgumentException("The dates must not be null");
        }
        Calendar cal1 = Calendar.getInstance();
        cal1.setTime(date1);
        Calendar cal2 = Calendar.getInstance();
        cal2.setTime(date2);
        return isSameDay(cal1, cal2);
    }

 public static boolean isToday(Date date) {
        return isSameDay(date, Calendar.getInstance().getTime());
    }

答案 4 :(得分:1)

试试这个:

currentDate.set(Calendar.DATE, 0);

答案 5 :(得分:0)

时区

您问题中的示例代码忽略了时区的关键问题。日期,即一天的开始和结束点,由时区定义。

java.util.Calendar和java.util.Date都没有分配时区。它们代表UTC / GMT的日期和时间。

因此,您需要应用与您的应用环境相关的所需时区。数据。这意味着你需要一个体面的日期时间库。除了java.util.Date/Calendar,java.text.SimpleDateFormat和他们的兄弟类之外的其他东西,因为它们是众所周知的麻烦。使用Joda-Time或与Java 8捆绑在一起的新java.time.* package(受Joda-Time启发,由JSR 310定义)。

请注意方法withTimeAtStartOfDay的使用。这是当天的第一时刻。这通常是00:00:00但不总是。夏令时(DST)或其他异常可能会产生不同的时间。该方法巧妙地处理了这些问题。

今天=时间跨度

从技术上讲,使用日期时间值时,特定的“日期”实际上是一段时间。定义该跨度的最常见且通常有用的方式是“半开”,其中开头是包含的,结尾是独占的。这意味着,对于当前日期,我们希望今天(包括)的第一时刻到明天的第一时刻(独家)。然后我们询问目标日期时间是否在该范围内。

还有其他方法可以完成这项工作。我正在展示这种方法,因为它适用于超出“今天”问题的情况。

约达时间

Joda-Time提供三个类来定义时间跨度:Interval,句点和持续时间。

示例代码

设置我们的输入数据,一个Calendar对象。

// Create a Calendar object to simulate input.
java.util.Date date = DateTime.now().minusDays( 3 ).toDate();
java.util.Calendar cal = java.util.Calendar.getInstance();
cal.setTime( date );

将“今天”定义为一段时间,并查看目标日期时间是否在该范围内。

DateTimeZone timeZone = DateTimeZone.forID( "Asia/Kolkata" );
DateTime dateTimeInQuestion = new DateTime( cal.getTimeInMillis(), timeZone );
DateTime now = new DateTime( timeZone );

Interval today = new Interval( now.withTimeAtStartOfDay(), now.plusDays( 1 ).withTimeAtStartOfDay() );
boolean isDateTimeInQuestionInInterval = today.contains( dateTimeInQuestion );

转储到控制台...

System.out.println( "cal: " + cal.getTime() );
System.out.println( "dateTimeInQuestion: " + dateTimeInQuestion );
System.out.println( "now: " + now );
System.out.println( "today: " + today );
System.out.println( "isDateTimeInQuestionInInterval: " + isDateTimeInQuestionInInterval );

跑步时......

cal: Wed Feb 12 22:46:04 PST 2014
dateTimeInQuestion: 2014-02-13T12:16:04.369+05:30
now: 2014-02-16T12:16:04.497+05:30
today: 2014-02-16T00:00:00.000+05:30/2014-02-17T00:00:00.000+05:30
isDateTimeInQuestionInInterval: false