我在Java / Android
中遇到了日期比较问题 DateFormat df = new SimpleDateFormat("dd/MM/yy HH:mm");
Calendar now = Calendar.getInstance();
Calendar c;
c = Calendar.getInstance();
c.set(settings.getInt("year", 0), settings.getInt("month", 0), settings.getInt("day", 0), settings.getInt("hour", 0), settings.getInt("minute", 0));
views.setTextViewText(R.id.textView4, String.valueOf(c.getTime().before(now.getTime())));
views.setTextViewText(R.id.textView2, String.format("%s - %s", df.format(c.getTime()), df.format(now.getTime())));
int timeout = 0;
while( c.getTime().before(now.getTime()) )
{
c.add(Calendar.SECOND, 30);
c.add(Calendar.MINUTE, 12);
c.add(Calendar.HOUR_OF_DAY, 6);
isHigh = 1 - isHigh;
timeout++;
if( timeout >= 400 )
break;
}
views.setTextViewText(R.id.textView5, String.valueOf(c.getTime().before(now.getTime())));
views.setTextViewText(R.id.textView3, String.format("%s - %s", df.format(c.getTime()), df.format(now.getTime())));
这样做的想法是从保存的设置中取出开始日期,然后将6:12:30添加到时钟中,直到它超过当前时间。
但是,我的文本框给了我以下内容:
false:09/07/12 04:20 - 11/08/12 00:00
false:09/07/12 04:20 - 11/08/12 00:00
2012年7月9日为什么在2012年8月11日(2012年8月11日)之前致电""
如果我更改" .before"到" .after",我明白了:
true:09/07/12 04:20 - 11/08/12 00:00
true:20/10/12 15:40 - 11/08/12 00:00
这似乎没有任何意义。
任何想法我做错了什么?感谢
答案 0 :(得分:6)
我想知道是不是因为你的“年份”设置是12而不是2012年。然后你要比较09/07/2012和11/08/0012 - 但是由于你的日期格式你无法判断。 / p>
出于诊断目的,请将格式字符串更改为"dd/MM/yyyy HH:mm"
,然后重试。
答案 1 :(得分:0)
嗯,它在JDK中的运作与12以及2012年一样。
DateFormat df = new SimpleDateFormat("dd/MM/yy HH:mm");
Calendar now = Calendar.getInstance();
Calendar c;
c = Calendar.getInstance();
c.set(12, 6, 9, 0, 0);
System.out.println(String.valueOf(c.getTime().before(now.getTime())));
System.out.println(String.format("%s - %s", df.format(c.getTime()), df.format(now.getTime())));
输出: - 真正 09/07/12 00:00 - 11/08/12 13:29
答案 2 :(得分:-2)
我之前有过这个问题。但我不需要比较小时,分钟和秒钟。只有约会。但@Jon Skeet的答案对我没用。所以我已经实现了自己的比较两个日期的方法。 丑陋,但工作正常。
private boolean before(Calendar c1, Calendar c2){
int c1Year = c1.get(Calendar.YEAR);
int c1Month = c1.get(Calendar.MONTH);
int c1Day = c1.get(Calendar.DAY_OF_MONTH);
int c2Year = c2.get(Calendar.YEAR);
int c2Month = c2.get(Calendar.MONTH);
int c2Day = c2.get(Calendar.DAY_OF_MONTH);
if(c1Year<c2Year){
return true;
}else if (c1Year>c2Year){
return false;
}else{
if(c1Month>c2Month){
return false;
}else if(c1Month<c2Month){
return true;
}else{
if(c1Day<c2Day){
return true;
}else{
return false;
}
}
}
}