如何在 Java 中检查日期是否大于另一个日期?
声明:本页面是StackOverFlow热门问题的中英对照翻译,遵循CC BY-SA 4.0协议,如果您需要使用它,必须同样遵循CC BY-SA许可,注明原文地址和作者信息,同时你必须将它归于原作者(不是我):StackOverFlow
原文地址: http://stackoverflow.com/questions/19109960/
Warning: these are provided under cc-by-sa 4.0 license. You are free to use/share it, But you must attribute it to the original authors (not me):
StackOverFlow
How to check if a date is greater than another in Java?
提问by Manas
I am working on a Java application which generates a report for a duration entered by a user in the command line. The user needs to enter the dates in the following format: dd-MM-yyyy
我正在开发一个 Java 应用程序,该应用程序生成用户在命令行中输入的持续时间的报告。用户需要按以下格式输入日期:dd-MM-yyyy
> java report startDate endDate
> java report startDate endDate
Example:
例子:
java report 01-01-2013 31-03-2013
Java 报告 01-01-2013 31-03-2013
In the code I save the dates in two strings. I have to make sure that the start date entered by the user should be a date earlier than the end-date. Is there an built-in function which can help me achieve this by passing these two strings to it?
在代码中,我将日期保存在两个字符串中。我必须确保用户输入的开始日期应该早于结束日期。是否有内置函数可以通过将这两个字符串传递给它来帮助我实现这一目标?
采纳答案by SpringLearner
You can use Date.before()or Date.after()or Date.equals()for date comparison.
您可以使用Date.before()或Date.after()或Date.equals()进行日期比较。
Taken from here:
取自这里:
import java.text.ParseException;
import java.text.SimpleDateFormat;
import java.util.Date;
public class DateDiff {
public static void main( String[] args )
{
compareDates("2017-01-13 00:00:00", "2017-01-14 00:00:00");// output will be Date1 is before Date2
compareDates("2017-01-13 00:00:00", "2017-01-12 00:00:00");//output will be Date1 is after Date2
compareDates("2017-01-13 00:00:00", "2017-01-13 10:20:30");//output will be Date1 is before Date2 because date2 is ahead of date 1 by 10:20:30 hours
compareDates("2017-01-13 00:00:00", "2017-01-13 00:00:00");//output will be Date1 is equal Date2 because both date and time are equal
}
public static void compareDates(String d1,String d2)
{
try{
// If you already have date objects then skip 1
//1
// Create 2 dates starts
SimpleDateFormat sdf = new SimpleDateFormat("yyyy-MM-dd HH:mm:ss");
Date date1 = sdf.parse(d1);
Date date2 = sdf.parse(d2);
System.out.println("Date1"+sdf.format(date1));
System.out.println("Date2"+sdf.format(date2));System.out.println();
// Create 2 dates ends
//1
// Date object is having 3 methods namely after,before and equals for comparing
// after() will return true if and only if date1 is after date 2
if(date1.after(date2)){
System.out.println("Date1 is after Date2");
}
// before() will return true if and only if date1 is before date2
if(date1.before(date2)){
System.out.println("Date1 is before Date2");
}
//equals() returns true if both the dates are equal
if(date1.equals(date2)){
System.out.println("Date1 is equal Date2");
}
System.out.println();
}
catch(ParseException ex){
ex.printStackTrace();
}
}
public static void compareDates(Date date1,Date date2)
{
// if you already have date objects then skip 1
//1
//1
//date object is having 3 methods namely after,before and equals for comparing
//after() will return true if and only if date1 is after date 2
if(date1.after(date2)){
System.out.println("Date1 is after Date2");
}
//before() will return true if and only if date1 is before date2
if(date1.before(date2)){
System.out.println("Date1 is before Date2");
}
//equals() returns true if both the dates are equal
if(date1.equals(date2)){
System.out.println("Date1 is equal Date2");
}
System.out.println();
}
}
回答by SudoRahul
You need to use a SimpleDateFormat
(dd-MM-yyyy
will be the format) to parse the 2 input strings to Date
objects and then use the Date#before(otherDate)
(or) Date#after(otherDate)
to compare them.
您需要使用SimpleDateFormat
(dd-MM-yyyy
将是格式) 将 2 个输入字符串解析为Date
对象,然后使用Date#before(otherDate)
(or)Date#after(otherDate)
来比较它们。
Try to implement the code yourself.
尝试自己实现代码。
回答by newuser
Parse the two dates firstDate
and secondDate
using SimpleDateFormat
.
解析两个日期firstDate
并secondDate
使用SimpleDateFormat
.
firstDate.after(secondDate);
firstDate.after(secondDate);
firstDate.before(secondDate);
firstDate.before(secondDate);
回答by Jayaram
Parse the string into date, then compare using compareTo
, before
or after
将字符串解析为日期,然后使用compareTo
,before
或 after进行比较
Date d = new Date();
d.compareTo(anotherDate)
i.e
IE
Date date1 = new SimpleDateFormat("MM/dd/yyyy").parse(date1string)
Date date2 = new SimpleDateFormat("MM/dd/yyyy").parse(date2string)
date1.compareTo(date2);
Copying the comment provided below by @MuhammadSaqib to complete this answer.
复制@MuhammadSaqib 下面提供的评论以完成此答案。
Returns the value 0 if the argument Date is equal to this Date; a value less than 0 if this Date is before the Date argument, and a value greater than 0 if this Date is after the Date argument. and NullPointerException - if anotherDate is null.
如果参数 Date 等于此 Date,则返回值 0;如果此 Date 在 Date 参数之前,则值小于 0,如果此 Date 在 Date 参数之后,则值大于 0。和 NullPointerException - 如果 anotherDate 为 null。
javadoc for compareTo http://docs.oracle.com/javase/6/docs/api/java/util/Date.html#compareTo(java.util.Date)
compareTo 的 javadoc http://docs.oracle.com/javase/6/docs/api/java/util/Date.html#compareTo(java.util.Date)