如何在java中比较两个日期和时间



我有两个Date对象,格式如下。

SimpleDateFormat sdf = new SimpleDateFormat("yyyy-MM-dd'T'HH:mm:ss");
String matchDateTime = sdf.parse("2014-01-16T10:25:00");
Date matchDateTime = null;
try {
matchDateTime = sdf.parse(newMatchDateTimeString);
} catch (ParseException e) {
// TODO Auto-generated catch block
e.printStackTrace();
}
// get the current date
Date currenthDateTime = null;
DateFormat dateFormat = new SimpleDateFormat("yyyy-MM-dd'T'HH:mm:ss");
Date dt = new Date();
String currentDateTimeString = dateFormat.format(dt);
Log.v("CCCCCurrent DDDate String is:", "" + currentDateTimeString);
try {                   
currenthDateTime = sdf.parse(currentDateTimeString);
} catch (ParseException e) {
// TODO Auto-generated catch block 
e.printStackTrace();
}

现在我想把上面两个日期和时间进行比较。我应该如何在Java中进行比较。

感谢

由于Date实现了Comparable<Date>,它就像一样简单

date1.compareTo(date2);

正如Comparable合同所规定的,如果date1被认为分别小于/等于/大于date2(即,在这种情况下,在之前/相同/之后),则它将返回负整数/零/正整数。

注意,Date还有.after().before()方法,它们将返回布尔值。

替代方案是…

将两个日期转换为毫秒,如下所示

Date d = new Date();
long l = d.getTime();

现在比较两个长值

使用compareTo()

返回值

如果参数Date等于此日期,则为0;如果此日期在Date参数之前,则为小于0的值;如果此日期在Date参数之后,则为大于0的值。

喜欢

if(date1.compareTo(date2)>0) 

另一种选择是Joda Time。

使用日期时间

DateTime date = new DateTime(new Date());
date.isBeforeNow();
or
date.isAfterNow();
// Get calendar set to the current date and time
Calendar cal = Calendar.getInstance();
// Set time of calendar to 18:00
cal.set(Calendar.HOUR_OF_DAY, 18);
cal.set(Calendar.MINUTE, 0);
cal.set(Calendar.SECOND, 0);
cal.set(Calendar.MILLISECOND, 0);
// Check if current time is after 18:00 today
boolean afterSix = Calendar.getInstance().after(cal);
if (afterSix) {
System.out.println("Go home, it's after 6 PM!");
}
else {
System.out.println("Hello!");
}

其他答案通常都是正确的,而且都过时了。请使用现代java日期和时间API java.time来进行日期和时间工作。与2014年2月提出这个问题时的情况相比,有了java.time,你的工作也变得容易多了。

String dateTimeString = "2014-01-16T10:25:00";
LocalDateTime dateTime = LocalDateTime.parse(dateTimeString);
LocalDateTime now = LocalDateTime.now(ZoneId.systemDefault());
if (dateTime.isBefore(now)) {
System.out.println(dateTimeString + " is in the past");
} else if (dateTime.isAfter(now)) {
System.out.println(dateTimeString + " is in the future");
} else {
System.out.println(dateTimeString + " is now");
}

当在2020年运行时,这个片段的输出是:

2014-01-16T10:25:00是过去的

由于您的字符串没有通知我们任何时区或UTC偏移量,我们需要知道了解了什么。上面的代码使用设备的时区设置。对于已知的时区,例如使用CCD_ 11。指定ZoneOffset.UTC作为UTC。

我正在利用您的字符串是ISO 8601格式的事实。java.time的类解析最常见的ISO8601变体,而不需要我们提供任何格式化程序。

问:对于Android开发,java.time不需要Android API 26级吗

java.time在较旧和较新的Android设备上都能很好地工作。它只需要至少Java 6

  • 在Java 8及更高版本中,以及在较新的Android设备上(从API 26级开始),现代API内置
  • 在非Android Java 6和7中,获得ThreeTen Backport,即现代类的Backport(JSR310的ThreeTen;请参阅底部的链接)
  • 在(旧的)安卓系统上使用安卓版的ThreeTen Backport。它被称为ThreeTenABP。并确保使用子包从org.threeten.bp导入日期和时间类

链接

  • Oracle教程:日期时间,解释如何使用java.Time
  • Java规范请求(JSR)310,其中首次描述了java.time
  • ThreeTen Backport项目,java.time到Java 6和7的Backport(JSR-310的ThreeTen)
  • ThreeTenABP,安卓版ThreeTen背包
  • 问题:如何在Android项目中使用ThreeTenABP,有一个非常彻底的解释
  • 维基百科文章:ISO 8601

相关内容

  • 没有找到相关文章