Java 将字符串日期与今天进行比较';这是我的约会。只比较月份和日期

Java 将字符串日期与今天进行比较';这是我的约会。只比较月份和日期,java,date,datetime,Java,Date,Datetime,我有一个日期字符串,格式如下:19930508。我只想使用这个字符串中的0508,它是MMdd,然后将它与今天的MMdd进行比较。 我使用的代码是: Date todaysDate = new Date(); String dateTest = "19930508"; SimpleDateFormat df = new SimpleDateFormat("MMdd"); Date date = df.parse(dateTest); String birthDate = df.format(da

我有一个日期字符串,格式如下:19930508。我只想使用这个字符串中的0508,它是MMdd,然后将它与今天的MMdd进行比较。 我使用的代码是:

Date todaysDate = new Date();
String dateTest = "19930508";
SimpleDateFormat df = new SimpleDateFormat("MMdd");
Date date = df.parse(dateTest);
String birthDate = df.format(date);

if(birthDate.equals(df.format(todaysDate))){do something}
问题是,生日格式在今天也不能正常工作。 日期变量不打印任何内容,生日字符串打印0220,这对我来说毫无意义。
有人知道我如何使用这种格式并将其与今天的格式进行比较吗?

使用java.time from java 8:

    MonthDay now = MonthDay.now();

    String dateTest = "19930508";
    DateTimeFormatter yearMonthDayFormatter = DateTimeFormatter.ofPattern("yyyyMMdd");
    MonthDay birthDay = MonthDay.parse(dateTest, yearMonthDayFormatter);

    if (birthDay.equals(now)) {
        System.out.println("same MMdd");
    } else {
        System.out.println("different MMdd");
    }

使用java 8中的java.time:

    MonthDay now = MonthDay.now();

    String dateTest = "19930508";
    DateTimeFormatter yearMonthDayFormatter = DateTimeFormatter.ofPattern("yyyyMMdd");
    MonthDay birthDay = MonthDay.parse(dateTest, yearMonthDayFormatter);

    if (birthDay.equals(now)) {
        System.out.println("same MMdd");
    } else {
        System.out.println("different MMdd");
    }


是的,您应该使用Calendar对象,这确实是处理日期的最佳库。@juju不,它肯定不是处理日期的最佳API,但在Java 8之前,它是唯一一个集成的APICalendar冗长,特别是如果您必须包含时间戳,但它可以工作……只是,如果您只在一个时区编程。
Date
Calendar
绝对不是处理日期的最佳库:看,是的,您应该使用Calendar对象,这确实是处理日期的最佳库。@jujuju不,它绝对不是处理日期的最佳API,但在Java 8之前,它是唯一一个集成的APICalendar是冗长的,特别是当您必须包含时间戳时,但它工作……只要您只在一个时区编程。
Date
Calendar
绝对不是处理日期的最佳库:请参阅,并使用MonthDay而不是LocalDate更新此java.time在java 7中不可用?这个解决方案对我来说似乎是可行的。如果你坚持使用Java 7,你可能想使用Joda Time(一个与Java 8中的Java.Time非常相似的库)。不,不可用,所以要么升级到Java 8,要么按照建议使用Joda Time。(语法可能几乎完全相同)。@AbbasZahid在项目中,java.time的大部分功能都被向后移植到java 6和java 7。由使用MonthDay而不是LocalDate构建java.time.Updated的同一个人构建这个java.time在java 7中不可用吗?这个解决方案对我来说似乎是可行的。如果你坚持使用Java 7,你可能想使用Joda Time(一个与Java 8中的Java.Time非常相似的库)。不,不可用,所以要么升级到Java 8,要么按照建议使用Joda Time。(语法可能几乎完全相同)。@AbbasZahid在项目中,java.time的大部分功能都被向后移植到java 6和java 7。由构建java.time.FYI的同一个人构建的SimpleDataFormat和date等麻烦的旧日期时间类现在是遗留的,被java.time类所取代。如果您既不想迁移到java 8,也不想依赖外部库(如Three Ten Backport),这可能是您能做的最好的事情。这很有趣,不是吗?不是比较日期,而是比较它们的字符串表示形式。您也没有得到yyyyMMdd字符串的验证;如果您偶然得到一个完全不相关的字符串,您不会注意到,您只会被告知这不是您的周年纪念(当然可以添加验证,但这将是额外的)。我真的不想按照项目限制使用外部库和java 8。我试图理解@Frank提供的这个示例,并试图看看如何用今天的方法验证它date@AbbasZahid如果您有所有这些限制(不能使用外部libs和java<8),您可以使用它更新问题。这将防止人们编写“不正确”的答案,因为像SimpleDataFormat和date这样麻烦的旧日期时间类现在是遗留的,被java.time类取代了。如果您既不想迁移到java 8,也不想依赖外部库(如Three Ten Backport),这可能是您能做的最好的方法。这很有趣,不是吗?不是比较日期,而是比较它们的字符串表示形式。您也没有得到yyyyMMdd字符串的验证;如果您偶然得到一个完全不相关的字符串,您不会注意到,您只会被告知这不是您的周年纪念(当然可以添加验证,但这将是额外的)。我真的不想按照项目限制使用外部库和java 8。我试图理解@Frank提供的这个示例,并试图看看如何用今天的方法验证它date@AbbasZahid如果您有所有这些限制(不能使用外部libs和java<8),您可以使用它更新问题。这将防止人们写“不正确”的答案