Warning: file_get_contents(/data/phpspider/zhask/data//catemap/5/date/2.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Java 检查我的日历日期参数是否为当前日期_Java_Date - Fatal编程技术网

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

Java 检查我的日历日期参数是否为当前日期,java,date,Java,Date,我只想找到date参数是当前日期(yyyy-MM-dd),而不使用SimpleDataFormat或任何日期到字符串的转换,然后找到is-equals 指定日期=2012-12-20 currentDate=2012-12-21 specifiedDate==currentDate 简单地说,我不希望验证时不包括时间(即HH:mm:S) 我试过类似的东西 public boolean isCurrentDate(Calendar date){ Calendar currentDate = Ca

我只想找到date参数是当前日期(yyyy-MM-dd),而不使用SimpleDataFormat或任何日期到字符串的转换,然后找到is-equals

指定日期=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;
}

请建议一个更好的方法,或者如果已经有任何库可用于此

如果您只想这样做,请尝试此操作

1)使用字符串

String s1 = new String("2012-01-27");
String s2 = new String("2011-01-28");
System.out.println(s1.compareTo(s2));
如果s1在词典编纂方面比s2“大”,并且这正是您所需要的,那么结果将是正确的。要获得更多信息,请阅读JavadocforCompareTo()方法

2)使用Joda时间

使用lib,您可以实现如下操作

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

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

return firstDate.compareTo(secondDate);

我更喜欢第二个选项

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

在比较之前将时间字段设置为0怎么样

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

如果您正在使用日历

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());
    }
试试这个:

currentDate.set(Calendar.DATE,0)

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

java.util.Calendar和java.util.Date都没有指定时区。它们以UTC/GMT表示日期和时间

因此,您需要应用与应用程序和数据上下文相关的所需时区。这意味着你需要一个像样的约会时间库。除了java.util.Date/Calendar、java.text.SimpleDateFormat及其同级类之外的其他类,因为它们非常麻烦。使用Java 8(受Joda Time的启发,由JSR 310定义)中的任何一个或新绑定

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

今天=时间跨度 从技术上讲,在处理日期时间值时,特定的“日期”实际上是一段时间。定义跨度的最常见和最有用的方法是“半开”,即开始是包含的,结束是独占的。这意味着,对于当前日期,我们希望从今天的第一刻(含)到明天的第一刻(不含)。然后我们询问目标日期时间是否在该范围内

还有其他方法可以完成这项工作。我之所以展示这种方法,是因为它适用于“今天”之外的情况

乔达时间 Joda Time提供了三个类来定义时间跨度:、期间和持续时间

示例代码 设置我们的输入数据,一个日历对象

// 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 );
当运行时

加州时间:星期三2014年2月12日22:46:04太平洋标准时间 问题日期时间:2014-02-13T12:16:04.369+05:30 现在:2014-02-16T12:16:04.497+05:30 今天:2014-02-16T00:00:00.000+05:30/2014-02-17T00:00:00.000+05:30 isDateTimeInQuestionInInterval:false
@prabhu好的,只是检查一下。谢谢。但是,我不想做任何字符串比较。如果我使用第二个选项,我必须将我的日历实例转换为LocalDate(Joda)?DateTime first=DateTimeFormatter.forPattern(“yyyy-MM-dd”).parse(“2012-12-21”)@普拉布看看我的编辑。根据您的要求,无需使用SimpleDataFormat或任何日期到字符串转换!!您不想进行字符串比较,也不想使用SimpleDataFormatter。没有这一点,我没有进一步的解决办法。