使用方法`compareTo()`和`equals()`得不到预期的结果

时间:2015-02-18 08:04:47

标签: android date equals compareto

我需要比较两个日期。 我从我的数据库中读取其中一个类型为String的其中一个。所以首先我以我需要的特定格式将String转换为Date,然后我以我想要的格式再次从系统中获取第二个Date。 我的问题是,即使它们是相同的,我也会得到意想不到的结果。

我的代码是:

public class SaharDateComparerActivity extends Activity {

@Override
protected void onCreate(Bundle savedInstanceState) {
    super.onCreate(savedInstanceState);
    setContentView(R.layout.activity_sahar_date_comparer);
    SimpleDateFormat dateFormat = new SimpleDateFormat("dd/MM/yyyy");
    String dateString ="18/02/2015";


    Date datee = convertStringToDate(dateString);
    Log.i("SAHAR","date 1:  "+ dateFormat.format(datee).toString());


    Date myDate = new Date();
    Log.i("SAHAR", "date 2:  "+dateFormat.format(myDate).toString());

    int testttt=    datee.compareTo(myDate);
    boolean a = datee.toString().equals(myDate.toString());
    Log.i("SAHAR", "date compared:  "+String.valueOf(testttt));
    Log.i("SAHAR", "date equal:  "+String.valueOf(a));

}

public Date convertStringToDate(String strDate) {
    // String startDateString = "06/27/2007";
    DateFormat df = new SimpleDateFormat("dd/MM/yyyy");
    Date date = null;
    try {
        date = df.parse(strDate);
        String newDateString = df.format(date);
        System.out.println(newDateString);
    } catch (ParseException e) {
        e.printStackTrace();
    }
    return date;
 }
}

and what i get is this

你可以看到我的两个日期是相同的,但是当我使用compareTo()false时,当我使用equals()方法时,我得到-1!

2 个答案:

答案 0 :(得分:1)

在清除数据库日期中缺少的时间单位后,您应该比较Date个对象,即没有小时,分钟,秒等。这是影响结果的因素。

String dateString ="18/02/2015";
Date datee = convertStringToDate(dateString);

Calendar c = Calendar.getInstance();
c.set(Calendar.HOUR_OF_DAY, 0);
c.set(Calendar.MINUTE, 0);
c.set(Calendar.SECOND, 0);
c.set(Calendar.MILLISECOND, 0);

Log.i("SAHAR", "Comparison result: " + datee.equals(c.getTime()));

答案 1 :(得分:0)

这是因为这两个日期有不同的小时,分​​钟,秒......(你没看到你刚才做的toString()输出)

您可以将其删除:Compare two dates in Java

或者你可以在自己的Comperator中查看日/月/年。