按日期比较对象(实现比较器)

新手上路,请多包涵

我有一个 java People 对象:

 public class People {

        String lastname;
        String firstname;
        String gender;
        String datebirth;
        String fcolor;

        public People(String lastname, String firstname, String gender,String datebirth, String fcolor) {
                this.lastname = lastname;
                this.firstname = firstname;
                this.gender = gender;
                this.datebirth = datebirth;
                this.fcolor = fcolor;
        }
        public String getLastname() {
                return lastname;
        }
        public String getFirstname() {
                return firstname;
        }
        public String getGender() {
                return gender;
        }
        public String getFcolor() {
                return fcolor;
        }
        public String getDatebirth() {
                return datebirth;
        }
}

我想创建一个比较器来按出生日期进行比较(出生日期有时采用这种格式“2/13/1943”,有时采用这种格式“2-13-1943”,你能帮我看看如何实现它吗?

我开始了这个,但感到困惑:

 import java.util.Date;
import java.text.SimpleDateFormat;
import java.util.Comparator;
import java.text.DateFormat;

public class CompareDateBirth implements Comparator<People>{

        public int compare(People p, People q) {

                 DateFormat df = new SimpleDateFormat("dd-MM-yyyy");
                 Date Pdate = null;
                 Date Qdate= null;
                    try {
                    Pdate = df.parse(p.getDatebirth());
                    Qdate = df.parse(q.getDatebirth());
                    } catch (Exception e) {
                    e.printStackTrace();
                    }
                      return Pdate.compareTo(Qdate) > 0 ? 1 : 0;
        }
}

原文由 akram 发布,翻译遵循 CC BY-SA 4.0 许可协议

阅读 461
1 个回答

如果您使用正确的类型存储出生日期 - java.util.Date 对象而不是 String - 你不会有这个问题。格式化是一个显示问题。

一个名为“People”的类?

这是我可能会做的(下面的所有类都在名为模型的包中的单独的 .java 文件中):

 package model;

public enum Gender { MALE, FEMALE }

public class Person {
    private String firstName;
    private String lastName;
    private Gender gender;
    private Date birthDate;  // I'd make sure to set hh:mm:ss all to midnight

    // constructors, getters, equals, hashCode, and toString are left for you
}

public class BirthDateComparator implements Comparator<Person> {
    public int compare(Person p, Person q) {
        if (p.getBirthDate().before(q.getBirthDate()) {
            return -1;
        } else if (p.getBirthDate().after(q.getBirthDate()) {
            return 1;
        } else {
            return 0;
        }
    }
}

原文由 duffymo 发布,翻译遵循 CC BY-SA 4.0 许可协议

撰写回答
你尚未登录,登录后可以
  • 和开发者交流问题的细节
  • 关注并接收问题和回答的更新提醒
  • 参与内容的编辑和改进,让解决方法与时俱进
推荐问题