Gna*_*air 25 java compare date
我需要比较java中的两个日期.我正在使用这样的代码:
Date questionDate = question.getStartDate();
Date today = new Date();
if(today.equals(questionDate)){
System.out.println("Both are equals");
}
Run Code Online (Sandbox Code Playgroud)
这不起作用.变量的内容如下:
questionDate 包含 2010-06-30 00:31:40.0 today 包含 Wed Jun 30 01:41:25 IST 2010我该如何解决这个问题?
Eri*_*ser 42
日期相等性取决于两个日期等于毫秒.使用创建新的Date对象new Date()永远不会等于过去创建的日期.Joda Time的API简化了日期工作; 但是,仅使用Java的SDK:
if (removeTime(questionDate).equals(removeTime(today))
...
public Date removeTime(Date date) {
Calendar cal = Calendar.getInstance();
cal.setTime(date);
cal.set(Calendar.HOUR_OF_DAY, 0);
cal.set(Calendar.MINUTE, 0);
cal.set(Calendar.SECOND, 0);
cal.set(Calendar.MILLISECOND, 0);
return cal.getTime();
}
Run Code Online (Sandbox Code Playgroud)
Coo*_*ans 13
我会用JodaTime来做这件事.这是一个例子 - 假设您想要找到两个日期之间的天数差异.
DateTime startDate = new DateTime(some_date);
DateTime endDate = new DateTime(); //current date
Days diff = Days.daysBetween(startDate, endDate);
System.out.println(diff.getDays());
Run Code Online (Sandbox Code Playgroud)
JodaTime可以从这里下载.
Gre*_*att 10
我不清楚你想要什么,但我会提到Date类还有一个compareTo方法,如果两个Date对象相等或者(如果它们不相等),可以用一个调用来确定更早.这允许您执行以下操作:
switch (today.compareTo(questionDate)) {
case -1: System.out.println("today is sooner than questionDate"); break;
case 0: System.out.println("today and questionDate are equal"); break;
case 1: System.out.println("today is later than questionDate"); break;
default: System.out.println("Invalid results from date comparison"); break;
}
Run Code Online (Sandbox Code Playgroud)
应该注意的是,API文档不保证结果为-1,0和1,因此您可能希望在任何生产代码中使用if-elses而不是switch.此外,如果第二个日期为null,您将获得NullPointerException,因此将代码包装在try-catch中可能很有用.
小智 5
比较两个日期的最简单方法是将它们转换为数值(如unix时间戳).
您可以使用Date.getTime()返回unix时间的方法.
Date questionDate = question.getStartDate();
Date today = new Date();
if((today.getTime() == questionDate.getTime())) {
System.out.println("Both are equals");
}
Run Code Online (Sandbox Code Playgroud)
在 Java 8 中不需要使用Joda-Time,因为它在java.time包中带有类似的新 API 。使用LocalDate类。
LocalDate date = LocalDate.of(2014, 3, 18);
LocalDate today = LocalDate.now();
Boolean isToday = date.isEqual( today );
Run Code Online (Sandbox Code Playgroud)
您可以询问Period上课日期之间的时间跨度。
Period difference = Period.between(date, today);
Run Code Online (Sandbox Code Playgroud)
LocalDate可以比较使用equals并且compareTo因为它没有关于时间和时区的信息。
该java.time框架是建立在Java 8和更高版本。这些类取代了麻烦的旧的遗留日期时间类,例如java.util.Date, Calendar, & SimpleDateFormat。
现在处于维护模式的Joda-Time项目建议迁移到java.time类。
要了解更多信息,请参阅Oracle 教程。并在 Stack Overflow 上搜索许多示例和解释。规范是JSR 310。
从哪里获得 java.time 类?
该ThreeTen-额外项目与其他类扩展java.time。该项目是未来可能添加到 java.time 的试验场。你可能在这里找到一些有用的类,比如Interval,YearWeek,YearQuarter,和更多。