检查当前日期java

时间:2018-04-08 12:55:53

标签: java date

来自java class Date docs:

  

before(Date when)测试此日期是否在指定日期之前。

当我使用此方法测试所选日期是否等于今天时,我得到wrong输出消息。

public class JavaApplication28 {

    /**
     * @param args the command line arguments
     */
    public static void main(String[] args) throws NoSuchAlgorithmException, ParseException {

        Date date1;
        SimpleDateFormat formatter = new SimpleDateFormat("yyyy-MM-dd");
        String statusDT ="2018-04-08";
        date1 = formatter.parse(statusDT);
        if (date1.equals(new Date())) {
            System.out.println("today");
        } else if (date1.before(new Date())) {
            System.out.println("wrong");
        }
    }
}

这是date1,即今天的日期

Sun Apr 08 00:00:00 MYT 2018

等值方法看起来也不是函数

  

equals(Object obj)比较两个日期是否相等。

3 个答案:

答案 0 :(得分:2)

  • 指定日期date1代表今天,但代表午夜时间:Sun Apr 08 00:00:00 MYT 2018
  • 用于比较的日期new Date()今天也代表,但实际时间(约15h10):Sun Apr 08 15:10:00 MYT 2018

date1如果在实际Date()之前if,那么它会进入好Java8部分

由于LocalDateTime引入了新的Date API,在大多数情况下它更容易使用:

  • Date持有Time(日/月/年)和LocalDate(秒/分/小时)
  • Date,其中包含LocalDateTime.toLocalDate()部分,可以从LocalTime
  • 获取
  • Time,其中包含LocalDateTime.toLocalTime()部分,可以从LocalDate
  • 获取

因此,如果您不重要,只想查看日/月/年,则只能使用{{1}中的LocalDateTime部分}}:

if (date1.toLocalDate().equals(LocalDate.now())) {
    System.out.println("today");                              //< ---
} else if (date1.toLocalDate().isBefore(LocalDate.now())) {
    System.out.println("before now");
} else if (date1.toLocalDate().isAfter(LocalDate.now())) {
    System.out.println("after now");
}

答案 1 :(得分:2)

试试这个:

long l1 = date1.getTime();
long l2 = (new Date()).getTime();

<强>输出

1523142000000
1523192849177

医生说:

  

比较两个相等的日期。结果是真的,当且仅当   参数不为null,是一个表示相同的Date对象   作为此对象的时间点,以毫秒为单位。因此,两个日期   当且仅当 getTime方法返回相同时,对象才相等   两者的长值

你错了,因为你的东西只相等于日期部分,但是没有,它也比较了时间部分

另一种解决方案

因为您使用的是Java 8,为什么不使用java.time来代替:

String statusDT = "2018-04-08";
LocalDate date = LocalDate.parse(statusDT, DateTimeFormatter.ofPattern("yyyy-MM-dd"));

if (date.isEqual(LocalDate.now())) {
    System.out.println("today");
} else if (date.isBefore(LocalDate.now())) {
    System.out.println("before");
} else {
    System.out.println("after");
}

答案 2 :(得分:-1)

java.util.Date包含日期和时间 - 可以在程序的输出中看到。通过解析Date获得的String没有时间,只有一个日期。换句话说,它的时间是00:00(即午夜)。因此,这两个Date不是equeal。

顺便说一句,您为Date类的 javadoc 提供的链接是Java 8文档。如果这意味着您使用的是Java 8,则会有一个新的Date-Time API。有一个教程 https://docs.oracle.com/javase/tutorial/datetime/index.html