所以,我想比较两个日期,如果一个日期在另一个日期之后,我有一个if循环。我的方法:
开始日期和结束日期是用户输入的变量,格式为月/日/年。
String startDate = "02/20/2012";
String endDate = "03/20/2012";
Date startDate1 = new SimpleDateFormat("MM/dd/yyyy").parse(startDate);
Date endDate1 = new SimpleDateFormat("MM/dd/yyyy").parse(endDate);
然而,startDate1显示了这一点:Mon Feb 20 00:00:00 EST 2012
和,
endDate1显示:Tue Mar 20 00:00:00 EDT 2012
我不明白我在这里做错了什么。
循环:
if (endDate1.after(startDate1)){
blah blah blah
}
答案 0 :(得分:2)
你没有做错任何事,这是java中Date对象的默认toString()表示格式
答案 1 :(得分:0)
用它来比较两个日期。
if(startDate1.compareTo(endDate1)>0){
System.out.println("Date1 is after Date2");
}else if(startDate1.compareTo(endDate1)<0){
System.out.println("Date1 is before Date2");
}else if(startDate1.compareTo(endDate1)==0){
System.out.println("Date1 is equal to Date2");
}else{
System.out.println("How to get here?");
}
答案 2 :(得分:0)
您使用MM/dd/yyyy
指定的内容是将用户输入正确转换为日期的输入格式。什么是&#34;显示&#34; (通过调试器?)是toString
方法返回的输出格式。
但该日期实际上存储为自1970年1月1日00:00:00 GMT以来经过的整数毫秒数。
答案 3 :(得分:-1)
您看到了正确的行为。 java.util.Date对象具有日期部分和时间部分。该对象没有时区,但toString
方法在生成字符串时会混淆地应用JVM的默认时区。
与Java捆绑在一起的java.util.Date和.Calendar类非常麻烦。避免他们。使用一个体面的日期时间库。对于Java,这意味着Joda-Time或Java 8中的新java.time包(受Joda-Time启发,由JSR 310定义)。
如果您确定不需要时间或时区,Joda-Time会提供LocalDate类。注意:天真的程序员通常认为他们不需要时间或时区,但后来后悔这个决定。
使用Joda-Time 2.3的示例代码。
String startInput = "02/20/2012";
String stopInput = "03/20/2012";
DateTimeFormatter formatter = DateTimeFormat.forPattern( "MM/dd/yyyy" );
LocalDate start = formatter.parseLocalDate( startInput );
LocalDate stop = formatter.parseLocalDate( stopInput );
boolean isStopAfterStart = stop.isAfter( start );
转储到控制台...
System.out.println( "start: " + start );
System.out.println( "stop: " + stop );
System.out.println( "isStopAfterStart: " + isStopAfterStart );
跑步时......
start: 2012-02-20
stop: 2012-03-20
isStopAfterStart: true