日期比较

时间:2012-07-01 22:14:21

标签: android date

我从Web服务获取日期,dd / mm / yyyy hh:mi:ss。 像这样:10/10/2011 12:00:00

并且,我正在尝试验证此日期是否在实际日期之前,但是当我无法将其与“if”进行比较时。

代码:

  private static Date formatDate(String data) throws Exception{
    if (data == null || data.equals("")){
        return null;
    }

    Date date = null;
    try {
        DateFormat formatter = new SimpleDateFormat("dd/MM/yyyy hh:mm:ss");
        date = (java.util.Date)formatter.parse(data);
        } catch (ParseException e) {
            e.printStackTrace();
        }
        return date;
  }

我比较的方法:

  Date planeDate = null;
  try {
     planeDate = formatDate(date);
  } catch (Exception e) {
      e.printStackTrace();
  }

  Calendar currentcal = Calendar.getInstance();
  currentcal.set(currentcal.get(Calendar.DAY_OF_MONTH),
                 currentcal.get(Calendar.MONTH),
                 currentcal.get(Calendar.YEAR),
                 currentcal.get(Calendar.HOUR_OF_DAY),
                 currentcal.get(Calendar.MINUTE),
                 currentcal.get(Calendar.SECOND));

  Date current = currentcal.getTime();

      //Always return false
  if(planeDate != null){
      if(planeDate.before(current) || planeDate.equals(current)){
          return true;
      } else {
          return false;
      }
  }
  return false;

1 个答案:

答案 0 :(得分:0)

您实例化日历对象的代码具有不正确的参数顺序。因此是错误的结果。

set方法的正确签名是这样的:
public final void set(int year, int month, int date, int hourOfDay, int minute, int second)

您的set方法代码的参数顺序如下:

currentcal.set(currentcal.get(Calendar.DAY_OF_MONTH),
                 currentcal.get(Calendar.MONTH),
                 currentcal.get(Calendar.YEAR),
                 currentcal.get(Calendar.HOUR_OF_DAY),
                 currentcal.get(Calendar.MINUTE),
                 currentcal.get(Calendar.SECOND));

因此,您的日历实例实际上返回一个日期对象,如下所示:

Mon Jan 02 18:50:36 GMT+05:30 8

实际上应该是附近的东西
Mon Jul 02 18:50:56 GMT+05:30 2012

按如下方式更改set方法输入,然后比较日期。然后它应该工作。

currentcal.set(
    currentcal.get( Calendar.YEAR ),
    currentcal.get( Calendar.MONTH ),
    currentcal.get( Calendar.DAY_OF_MONTH ),
    currentcal.get( Calendar.HOUR_OF_DAY ),
    currentcal.get( Calendar.MINUTE ),
    currentcal.get( Calendar.SECOND )
);