如何在 Java 中比较两个日期

在本教程中,我们将学习多种方法来比较 Java 中的日期。为了获得理想的结果,我们可以用以下的方法,即 before()after()equals()compareTo()

before() 方法比较 Java 中的两个日期

第一种方法是 Java Date 类中的 before() 方法,该方法执行日期 Date 对象与给定的 Date 即时比较。当日期对象早于给定的日期对象时,它将返回真。

示例代码:

// java 1.8
package simpletesting;
import java.text.ParseException;
import java.text.SimpleDateFormat;
import java.util.Date;
public class SimpleTesting {
    public static void main(String[] args) {
        try {
            SimpleDateFormat dateFormat = new
                SimpleDateFormat ("yyyy-MM-dd");
            Date date1 = dateFormat.parse("2019-09-16");
            Date date2 = dateFormat.parse("2020-01-25");
            System.out.println("Date-1: " +
                               dateFormat.format(date1));
            System.out.println("Date-2: " +
                               dateFormat.format(date2));
            if(date1.before(date2)){
                System.out.println(
                    "Date-1 is before Date-2");
            }
        } catch (ParseException ex) {
        }
    }
}

输出:

Date-1: 2019-09-16
Date-2: 2020-01-25
Date-1 is before Date-2

after() 方法来比较 Java 中的两个日期

另一种实现这种比较的方法是通过在 Java Date 类中使用 after() 方法。此方法与上述之前方法相反,并且当日期对象晚于给定的日期对象时返回 true

示例代码:

// java 1.8
package simpletesting;
import java.text.ParseException;
import java.text.SimpleDateFormat;
import java.util.Date;
public class SimpleTesting {
    public static void main(String[] args) {
        try {
            SimpleDateFormat sdformat = new
                SimpleDateFormat("yyyy-MM-dd");
            Date date1 = sdformat.parse("2020-01-25");
            Date date2 = sdformat.parse("2019-09-16");
            System.out.println("Date-1: " +
                               sdformat.format(date1));
            System.out.println("Date-2: " +
                               sdformat.format(date2));
            if (date1.after(date2)) {
                System.out.println(
                    "Date-1 is after Date-2");
            }
        } catch (ParseException ex) {
        }
    }
}

输出:

Date-1: 2020-01-25
Date-2: 2019-09-16
Date-1 is after Date-2

equals() 方法比较 Java 中的两个日期

另一种方法是在 Java Date 类中使用 equals() 方法。如果两个日期一样的话,则返回 true

示例代码:

// java 1.8
package simpletesting;
import java.text.ParseException;
import java.text.SimpleDateFormat;
import java.util.Date;
public class SimpleTesting {
    public static void main(String[] args) {
        try {
            SimpleDateFormat sdformat = new
                SimpleDateFormat("dd-MM-yyyy");
            Date date1 = sdformat.parse("2020-01-25");
            Date date2 = sdformat.parse("2020-01-25");
            System.out.println("Date-1: " +
                               sdformat.format(date1));
            System.out.println("Date-2: " +
                               sdformat.format(date2));
            if (date1.equals(date2)) {
                System.out.println(
                    "Date-1 is same as Date-2");
            }
        } catch (ParseException ex) {
        }
    }
}

输出:

Date-1: 2020-01-25
Date-2: 2020-01-25
Date-1 is same as Date-2

compareTo() 方法来比较 Java 中的两个日期

最后一种方法是 Java Date 类中的 compareTo() 方法。它比较两个日期并根据比较结果返回不同的值。

  • 如果参数日期等于日期对象,则返回 0
  • 如果 Date 对象在参数日期之后,则返回正值
  • 如果 Date 对象早于参数日期,则返回负数

示例代码:

// java 1.8
package simpletesting;
import java.text.ParseException;
import java.text.SimpleDateFormat;
import java.util.Date;
public class SimpleTesting {
    public static void main(String[] args) {
        try {
            SimpleDateFormat sdformat = new
                SimpleDateFormat("yyyy-MM-dd");
            Date date1 = sdformat.parse(
               "2020-01-25");
      Date date2 = sdformat.parse("2020-01-23");
      System.out.println(
          "Date-1: " + sdformat.format(date1));
      System.out.println(
          "Date-2: " + sdformat.format(date2));
        if(date1.compareTo(date2) > 0) {
         System.out.println(
             "Date-1 is after Date-2");
      } else if(date1.compareTo(date2) < 0) {
         System.out.println(
             "Date-1 is before Date-2");
      } else if(date1.compareTo(date2) == 0) {
         System.out.println(
             "Date-1 is same as Date-2");
      }
        } catch (ParseException ex) {
        }
    }
}

输出:

Date-1: 2020-01-25
Date-2: 2020-01-23
Date-1 is after Date-2

如何在 JavaScript 中比较两个数组

本教程介绍了三种在 JavaScript 中比较数组的方法。有多种方法,但性能可能有所不同。

在 JavaScript 中 Array.prototype.equals 比较两个数组

JavaScript 为我们提供了在现有类中添加新属性和方法的功能。我们可以使用 Array.prototype 将我们的自定义方法 equals 添加到 Array 对象中。

在下面的例子中,我们将首先检查两个数组的长度,然后比较每个项目。我们也在检查 a1a2 是否是 Array 实例,因为如果不是,它们就不一样。最后,我们使用 a1.equals(a2) 的方法来比较第一个数组和第二个数组。

例子:a1.equals(a2)

var a1 = [1, 2, 3];
var a2 = [1, 2, 3];
var a3 = [1, 2, 3, 4];
Array.prototype.equals = function (getArray) {
  if (this.length != getArray.length) return false;
  for (var i = 0; i < getArray.length; i++) {
    if (this[i] instanceof Array && getArray[i] instanceof Array) {
      if (!this[i].equals(getArray[i])) return false;
    } else if (this[i] != getArray[i]) {
      return false;
    }
  }
  return true;
};
console.log("Comparing a1 and a2", a1.equals(a2));
console.log("Comparing a1 and a3", a1.equals(a3));

输出:

Comparing a1 and a2 true
Comparing a1 and a3 false

在 JavaScript 中 JSON.stringify() 比较数组

另一种比较两个数组的技术是先将它们投向字符串类型,然后再进行比较。JSON 是用来从/到 web 服务器传输数据的,但我们可以在这里使用它的方法。我们可以使用 JSON.stringify()Array 转换为 string。由于现在 a1a2 都是字符串,我们可以使用 === 查看它们是否相等。

例子:

var a1 = [1, 2, 3];
var a2 = [1, 2, 3];
var a3 = [1, 2, 3, 4];
console.log("Comparing a1 and a2", JSON.stringify(a1) === JSON.stringify(a2));
console.log("Comparing a1 and a3", JSON.stringify(a1) === JSON.stringify(a3));

输出:

Comparing a1 and a2 true
Comparing a1 and a3 false

在 JavaScript 中使用循环比较两个数组

循环是 JavaScript 中比较数组的最传统的方式,因为它涉及到在数组中循环,然后将每一个元素相互比较,检查它们是否匹配。

为了使其更简洁,我们可以使用函数,然后返回 boolean 作为结果。

举个例子,我们可以使用函数,然后返回 boolean 结果。

var a1 = [1, 2, 3];
var a2 = [1, 2, 3];
var a3 = [1, 2, 3, 4];
const getResult = function (a1, a2) {
   var i = a1.length;
   if (i != a2.length) return false;
   while (i--) {
     if (a1[i] !== a2[i]) return false;
   }
   return true;
 };
console.log("Comparing a1 and a2", getResult(a1, a2));
console.log("Comparing a1 and a3", getResult(a1, a3));

输出:

Comparing a1 and a2 true
Comparing a1 and a3 false

如何在 JavaScript 中比较两个日期

JavaScript 内置了日期的比较系统,让比较变得非常简单。

本教程介绍了如何在 JavaScript 中比较两个日期的不同方法。每一种方法都会有一个代码示例,你可以在自己的机器上运行。

JavaScript 用比较运算符比较两个日期

我们可以直接用 JavaScript 中的比较运算符如 <, <=, >>= 来比较两个日期。

var date1 = new Date('2020-10-23');
var date2 = new Date('2020-10-22');
console.log(date1 > date2);
console.log(date1 >= date2);
console.log(date1 < date2);
console.log(date1 <= date2);

输出:

true
true
false
false
注意
在 JavaScript 中,我们不能直接使用相等运算符来比较 Date 对象。因为在 JavaScript 中,两个不同的对象在严格和抽象的层面上都是不相等的。请看下面的例子。
let date1 = new Date();
let date2 = new Date(date1);
console.log(date1 == date2);
console.log(date1 === date2);
console.log(date1 != date2);
console.log(date1 !== date2);

输出:

false
false
true
true

我们可以用下面的方法来检查两个日期是否相等。

JavaScript 用 getTime() 方法比较两个日期

我们使用 getTime() 方法将两个日期转换成对应于它们的时间的数值,然后我们可以直接比较其中的两个日期。

let date1 = new Date(2019, 08, 07, 11, 45, 55);
let date2 = new Date(2019, 08, 03, 11, 45, 55);
if (date1.getTime() < date2.getTime())
  document.write("date1 is lesser than date2");
else if (date1.getTime() > date2.getTime())
  document.write("date1 is greater than date2");
else
  document.write("both are equal");

输出:

date1 is lesser than date2

getTime() 方法可以在 JavaScript 中检查两个日期是否相等。

let date1 = new Date();
let date2 = new Date(date1);
if (date1.getTime() == date2.getTime())
	document.write("Two dates are equal.");
if (date1.getTime() === date2.getTime())
	document.write("Two dates are equal.");

输出:

Two dates are equal.Two dates are equal.

JavaScript 使用 valueOf() 方法比较两个日期

Date 对象的 valueOf() 方法与 getTime() 方法类似。它将 Date 对象转换为数值。

let date1 = new Date(2019, 08, 07, 11, 45, 55);
let date2 = new Date(2019, 08, 07, 11, 45, 55);
if (date1.valueOf() < date2.valueOf())
  document.write("date1 is lesser than date2");
else if (date1.valueOf() > date2.valueOf())
  document.write("date1 is greater than date2");
else if(date1.valueOf() === date2.valueOf())
  document.write("both are equal");
console.log(date1.valueOf() === date2.valueOf())

getTime()valueOf() 都返回自 1970 年 1 月 1 日 00:00 UTC 以来的毫秒数。

JavaScript 使用 Number() 函数比较两个日期

Number() 函数将日期对象转换为代表该对象在 Java 中价值的数字。如果对象不能被转换为一个合法的数字,它将返回 NaN。

let date1 = new Date(2019, 08, 07, 11, 45, 55);
let date2 = new Date(2019, 08, 07, 11, 45, 55);
console.log(Number(date1) === Number(date2))
console.log(Number(date1) == Number(date2) )
console.log(Number(date1) < Number(date2))
console.log(Number(date1) > Number(date2) )

JavaScript 用一元运算符 + 比较两个日期

一元运算符接受一个参数,并对这个参数或操作数进行操作。JavaScript 有很多单调运算符。在这里,我们使用一元加+ 运算符,它试图将参数转换为一个数字。

let date1 = new Date(2019, 08, 07, 11, 45, 55);
let date2 = new Date(2019, 08, 07, 11, 45, 55);
console.log(+date1 === +date2)
console.log(+date1 == +date2)
console.log(+date1 < +date2)
console.log(+date1 > +date2)

Number 函数和一元 + 运算符都会在后台调用 valueOf() 方法。