我有两个 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进行比较。
由于
答案 0 :(得分:32)
自Date
实施Comparable<Date>
以来,它就像:
date1.compareTo(date2);
如Comparable
合同规定的那样,如果date1
被认为分别小于/大于date2
,则它将返回负整数/零/正整数(即,在这种情况下之前/之后/之后)。
请注意,Date
还有.after()
和.before()
方法,这些方法会返回布尔值。
答案 1 :(得分:5)
替代方案是......
将两个日期转换为毫秒,如下所示
Date d = new Date();
long l = d.getTime();
现在比较两个长值
答案 2 :(得分:3)
返回值
如果参数Date等于此Date,则0;如果此Date在Date参数之前,则小于0的值;如果此Date在Date参数之后,则值大于0.
<强>像强>
if(date1.compareTo(date2)>0)
答案 3 :(得分:3)
另一种选择是Joda-Time。
使用DateTime
DateTime date = new DateTime(new Date());
date.isBeforeNow();
or
date.isAfterNow();
答案 4 :(得分:2)
// 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!");
}
答案 5 :(得分:1)
其他答案通常是正确的,并且都已过时。在您的日期和时间工作中,请使用java.time(现代的Java日期和时间API)。与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偏移量,因此我们需要了解所理解的内容。上面的代码使用设备的时区设置。对于已知的时区,请使用ZoneId.of("Asia/Ulaanbaatar")
之类的。对于UTC,请指定ZoneOffset.UTC
。
我正在利用您的字符串为ISO 8601格式的事实。 java.time类可解析最常见的ISO 8601变体,而无需我们提供任何格式化程序。
java.time在较新和较旧的Android设备上均可正常运行。它只需要至少 Java 6 。
org.threeten.bp
导入日期和时间类。java.time
。java.time
向Java 6和7(JSR-310的ThreeTen)的反向端口。