Java 比较两个日期是否为同一天

Java 比较两个日期是否为同一天,java,Java,早安,快速提问,我正在尝试比较同一时区(城市)的两个日期是否是同一天。有人知道为什么下面的代码有效,而另一个不有效,似乎无法理解为什么 SimpleDateFormat fmt = new SimpleDateFormat("EEE dd,MMM"); Date newparsetemp = fmt.parse(parsedate); Date currentdateparse = fmt.parse(currentdate); if(currentdateparse.equals(ne

早安,快速提问,我正在尝试比较同一时区(城市)的两个日期是否是同一天。有人知道为什么下面的代码有效,而另一个不有效,似乎无法理解为什么

SimpleDateFormat fmt = new SimpleDateFormat("EEE dd,MMM");
Date newparsetemp = fmt.parse(parsedate);
Date currentdateparse = fmt.parse(currentdate);


  if(currentdateparse.equals(newparsetemp)){
       //code executes
  }
但是如果我用这个,if条件不成立

SimpleDateFormat fmt = new SimpleDateFormat("yyyyMMdd"); 
Date newparsetemp = fmt.parse(parsedate);
Date currentdateparse = fmt.parse(currentdate);

if(currentdateparse.equals(newparsetemp)){
   //does not 

  }

如果您的意思是“仅比较星期几”,您是否尝试过比较Calendar.get(Calendar.day\u of u week)的结果?

格式化后比较字符串是一件奇怪的事情。请尝试以下方法:

Calendar cal = GregorianCalendar.getInstance();
cal.setTime(parsedate);
Calendar cal2 = GregorianCalendar.getInstance();
cal2.setTime(currentdate);



cal2.set(Calendar.HOUR, 0);
cal2.set(Calendar.MINUTE, 0);
cal2.set(Calendar.SECOND, 0);
cal2.set(Calendar.MILLISECOND, 0);

cal.set(Calendar.HOUR, 0);
cal.set(Calendar.MINUTE, 0);
cal.set(Calendar.SECOND, 0);
cal.set(Calendar.MILLISECOND, 0);

System.out.println(cal.equals(cal2) ? "true" : "false");
你对时区的评论需要澄清。你是说

比较不同时区的两个日期是否为同一天


您是否同意,在同一月份和同一天,不同年份的两个不同日期有可能匹配一周中的同一天

而且不可能有两个不同的日期匹配同一天、月和年?

考虑使用


最好跳过
Date
,改用
LocalDate

不久前,我在一个安卓应用程序中就这样做了

public boolean isSameDay(Event otherEvent) {
    if(otherEvent == null) return false;
    SimpleDateFormat format = new SimpleDateFormat("yyyy-MM-dd HH:mm");
    try {
        Calendar otherEventDate = Calendar.getInstance();
        otherEventDate.setTime(format.parse(otherEvent.getStartTime()));
        Calendar thisEventDate = Calendar.getInstance();
        thisEventDate.setTime(format.parse(getStartTime()));
        return (otherEventDate.get(Calendar.DAY_OF_MONTH) == thisEventDate.get(Calendar.DAY_OF_MONTH) &&
                 otherEventDate.get(Calendar.DAY_OF_YEAR)  == thisEventDate.get(Calendar.DAY_OF_YEAR));
    } catch(ParseException e) {
        System.out.println(e.toString());
        e.printStackTrace();
    }
    return false;
}

这是我所做的代码,我只是检查这两个事件是否在同一天发生。如果您想增加一些精度,您只需自己添加。

parseDate和currentDate的值是多少?是否改为使用Joda Time?对于“我在Java中遇到了这个日期/时间问题…”来说,这总是一个很好的开始。请注意,您给出的代码根本没有提到时区。。。你真的有时区吗?让我们看看一些输入和调试信息。^^关于另一个主题,在Java中处理时间/日期时,我始终建议使用第三方库,例如..@sparrow:为什么要将它们转换为字符串作为开始?停止这样做:)不必要的字符串转换是一个非常糟糕的主意。@sparrow最好的做法是创建一个简单的测试用例,使用硬编码的输入和错误的输出-在你这样做之前,人们只能猜测出哪里出了错…我不认为它实际上是在谈论一周中的某一天-我认为它是关于整个日期的。现在还不清楚。@Jon:对。然后可能是Calendar.get(Calendar.DAY\u OF_YEAR)和Calendar.get(Calendar.YEAR)我想我更愿意使用Joda Time:)
public boolean isSameDay(Event otherEvent) {
    if(otherEvent == null) return false;
    SimpleDateFormat format = new SimpleDateFormat("yyyy-MM-dd HH:mm");
    try {
        Calendar otherEventDate = Calendar.getInstance();
        otherEventDate.setTime(format.parse(otherEvent.getStartTime()));
        Calendar thisEventDate = Calendar.getInstance();
        thisEventDate.setTime(format.parse(getStartTime()));
        return (otherEventDate.get(Calendar.DAY_OF_MONTH) == thisEventDate.get(Calendar.DAY_OF_MONTH) &&
                 otherEventDate.get(Calendar.DAY_OF_YEAR)  == thisEventDate.get(Calendar.DAY_OF_YEAR));
    } catch(ParseException e) {
        System.out.println(e.toString());
        e.printStackTrace();
    }
    return false;
}