当前位置: 首页 > 知识库问答 >
问题:

我的日期类中的equals方法在我的日期测试程序中返回false

储毅
2023-03-14

我知道我的两个日期是相等的,因为我可以使用accessor方法获取日期、月份和年份,然后将它们作为一个字符串打印出来。当我将这两个日期作为字符串打印出来时,它们打印出来的结果是相等的。我尝试过用equals方法使用几个不同的字符串和日期实现,但都没有成功。我只在比较日期的字符串为“1/1/2000”时出现问题。这是我的方法。我的toString()方法将日期写为字符串“01/01/2000”

如果 equals() 方法的日期相同,则应返回 false,但一个在长显示中,另一个在短显示中,即“1990 年 1 月 1 日”和“01/01/1990”应返回 false 值(如果通过等于方法进行比较)。但是,日期(如“1/1/2000”和“01/01/2000”)在通过 equals() 方法进行比较时,应返回 true 值。

这个Date类是为我所在的java类编写的,以了解面向对象程序及其类的工作方式。

默认日期构造器-日期()

    public Date() {
    setDate(2000, 01, 01);
}

日期(字符串日期字符串)

public Date(String dateStr) {
    setDate(dateStr);
}

设置日期(字符串日期)

public void setDate(String dateStr) {
        int slashCount = 0;
        for (int i = 0; i < dateStr.length(); i++) {
            if(dateStr.charAt(i) == '/') {
                slashCount++;
            }
        }
        if (slashCount == 2) {
            if (dateStr.indexOf('/') >= 0) {
                int index = dateStr.indexOf('/');
                String dd = dateStr.substring(index+1, dateStr.length());
                if (dd.substring(1, dd.length()).lastIndexOf('/') >= 0 ) {
                    int index2 =  dd.lastIndexOf('/');
                    String yy = dd.substring(index2+1, dd.length());
                    String mm = dateStr.substring(0, index);
                    dd = dd.substring(0, index2);
                    yy = yy.substring(0, yy.length());
                    //System.out.println(mm + "\n" + dd + "\n" + yy );
                    int y = Integer.parseInt(yy);
                    int d = Integer.parseInt(dd);
                    int m = Integer.parseInt(mm);
                    setYear(y);
                    setMonth(m);
                    setDay(d);
                    //System.out.println("get year returns " + getYear());
                    //System.out.println("get month returns " + getMonth());
                    //System.out.println("get day returns " + getDay());
                }
            }
        } else {
            throw new IllegalArgumentException();
        }
    }

等于(其他对象)

    public boolean equals(Object other) {
    if (other instanceof Date) {
        Date that = (Date) other;
        return this.day == that.day
                && this.month == that.month
                && this.year == that.year;
    } else if (other instanceof String) {
        Date that = new Date((String) other);
        String thatString = that.toString();
        String thisString = this.toString();
        return thatString.equals(thisString);
    }
        return false;
}

到字符串()

    public String toString() {
    if (isShortDisplay()) {
        return String.format("%02d/%02d/%04d", month, day, year);
    } else {
        return String.format(monthString(month) + " %d, %04d", day, year);
    }
}

日期测试.java

    String date = "1/1/2000";
    Date dstring = new Date(date);
    Date d1 = new Date();
    System.out.println(d1);
    if (!(d1.toString().equals("1/1/2000"))) {
        System.out.println("Error 1");
        System.out.println();
        System.out.println("This day (d1) day = " + d1.getDay());
        System.out.println("This month (d1) month = " + d1.getMonth());
        System.out.println("This year (d1) year = " + d1.getYear());
        System.out.println("This date (d1) string = " + d1.toString());
        System.out.println();
        System.out.println("That (dstring) day = " + dstring.getDay());
        System.out.println("That (dstring) month = " + dstring.getMonth());
        System.out.println("That (dstring) year = " + dstring.getYear());
        System.out.println("That date (dstring) string = " + dstring.toString());
        System.out.println(d1.toString().equals(dstring.toString()));
        System.out.println(d1.equals(date));
        System.out.println(d1.toString().toString());

        System.out.println(d1.toString());
        System.out.println(dstring);

    }

日期测试.java控制台

01/01/2000
Error 1

This day (d1) day = 1
This month (d1) month = 1
This year (d1) year = 2000
This date (d1) string = 01/01/2000

That (dstring) day = 1
That (dstring) month = 1
That (dstring) year = 2000
That date (dstring) string = 01/01/2000
true
true
01/01/2000
01/01/2000
01/01/2000

共有1个答案

贺兴平
2023-03-14

我使用以下内容作为测试...

Date date1 = new Date("01/01/2000");
Date date2 = new Date("1/1/2000");
System.out.println(date1);
System.out.println(date1.equals(date2));
System.out.println(date2.equals(date1));
System.out.println(date1.equals("1/1/2000"));
System.out.println(date1.equals("01/01/2000"));
System.out.println(date2.equals("1/1/2000"));
System.out.println(date2.equals("01/01/2000"));

我得到了以下输出。。。

01/01/2000
true
true
true
true
true
true

所以,除非你愿意提供一个实际可运行的例子来证明你的问题,否则我不确定还能说什么。。。

 类似资料:
  • 本文向大家介绍python根据日期返回星期几的方法,包括了python根据日期返回星期几的方法的使用技巧和注意事项,需要的朋友参考一下 本文实例讲述了python根据日期返回星期几的方法。分享给大家供大家参考。具体如下: 这个函数给定日期,输出星期几,至于0是星期一还是星期天,这和时区有关,反正我这里是0表示星期一 如果要输出当天是星期几,执行下面的代码 输出结果为: 星期一 希望本文所述对大家的

  • 问题内容: 这是我的SQL Server表 这似乎很容易做到,但我不知道为什么会被卡住。我只想为每个id选择max(date)和该max(date)处的值。我想忽略相对于每个ID而言不是max(date)的所有其他日期。 这是我希望表格看起来像的样子: 我尝试通过使用max(date)进行分组,但没有进行任何分组。我不确定自己在做什么错。在此先感谢您的帮助! 问题答案: 您可以使用以下内容: 观看

  • 将两个日期与方法之前的日期进行比较时,如果日期相似,则返回false,如下所示: 日期1:2012年12月18日星期二00:00:00 GMT 02:00 方法在这种情况下总是返回false,这对我没有意义(换句话说不适用于我的情况)。我想检查日期(日/月/年)是否等于今天的日期(日/月/年)?

  • 本文向大家介绍Java中的日期类,包括了Java中的日期类的使用技巧和注意事项,需要的朋友参考一下 Java提供了Java中可用的Date类。util程序包,此类封装了当前日期和时间。 Date类支持两个构造函数,如下表所示。 序号 构造函数与说明 1 Date() 此构造函数使用当前日期和时间初始化对象。 2 Date(long millisec) 此构造函数接受一个参数,该参数等于自1970年

  • 问题内容: 如果您不相信我,这是我在Eclipse中使用的一些调试表达式: 我在函数中使用它,它在开始和结束日期之间返回一个随机日期: 任何想法如何使它返回正确的Unix时间以供将来使用? 谢谢! 问题答案: 如果要使用超出32位整数日期范围的日期,请使用PHP的dateTime对象

  • 问题内容: 预期输入: 预期产量: 问题答案: 您还可以查看DatePeriod类: 这应该使您具有DateTime对象的数组。 进行迭代