我需要比较两个日期(例如date1和date2),并提出一个布尔的同日,这是真的两个日期共享同一天,如果不是假的。

我该怎么做呢?这里似乎出现了一阵混乱。如果可能的话,我希望避免在JDK之外引入其他依赖项。

澄清:如果date1和date2拥有相同的年、月和日,则sameDay为真,否则为假。我知道这需要时区知识……它将很好地通过一个时区,但我可以生活与GMT或当地时间,只要我知道行为是什么。

再次澄清:

date1 = 2008 Jun 03 12:56:03
date2 = 2008 Jun 03 12:59:44
  => sameDate = true

date1 = 2009 Jun 03 12:56:03
date2 = 2008 Jun 03 12:59:44
  => sameDate = false

date1 = 2008 Aug 03 12:00:00
date2 = 2008 Jun 03 12:00:00
  => sameDate = false

当前回答

如何:

SimpleDateFormat fmt = new SimpleDateFormat("yyyyMMdd");
return fmt.format(date1).equals(fmt.format(date2));

如果需要,还可以将时区设置为SimpleDateFormat。

其他回答

对于Kotlin开发者来说,这是比较格式化字符串方法的版本:

val sdf = SimpleDateFormat("yyMMdd")
if (sdf.format(date1) == sdf.format(date2)) {
    // same day
}

这不是最好的方法,但它既短又有效。

通过计算每个日期的儒略日数,然后比较这些日期,您可以避免外部依赖关系和使用Calendar的性能影响:

public static boolean isSameDay(Date date1, Date date2) {

    // Strip out the time part of each date.
    long julianDayNumber1 = date1.getTime() / MILLIS_PER_DAY;
    long julianDayNumber2 = date2.getTime() / MILLIS_PER_DAY;

    // If they now are equal then it is the same day.
    return julianDayNumber1 == julianDayNumber2;
}

Java 8

如果你在你的项目中使用Java 8,并比较Java .sql。时间戳,你可以使用LocalDate类:

sameDate = date1.toLocalDateTime().toLocalDate().equals(date2.toLocalDateTime().toLocalDate());

如果您正在使用java.util。日期,看看伊斯特万的答案,它不那么含糊。

对于android用户:

您可以使用DateUtils.isToday(datemillisecseconds)来检查给定的日期是否是当前日期。

API参考:https://developer.android.com/link /android/text/text/dateutils.html @ isToday(long)

在JAVA 8中,我们可以将Date对象转换为LocalDate对象,因此我们可以这样做:

public static boolean isDatesAreDifferentDays(Date date1,Date date2)
{
    LocalDate d1 = date1.toInstant().atZone(ZoneId.systemDefault()).toLocalDate();
    LocalDate d2 = date2.toInstant().atZone(ZoneId.systemDefault()).toLocalDate();
    if(d1.getDayOfMonth() != d2.getDayOfMonth())
    {
        return false;
    }
    else if(d1.getMonth() != d2.getMonth())
    {
        return false;
    }
    else if(d1.getYear() != d2.getYear())
    {
        return false;
    }
    else
    {
        return true;
    }
}