【问题标题】:check if a date is equal independently of the year检查日期是否与年份无关
【发布时间】:2018-04-16 16:10:44
【问题描述】:

我使用 javaSE 1.6,我需要比较两个日期并检查它们是否相同。此检查需要独立于年份。

例如,我需要确定今天是否是某人的生日,并且我需要在未来几年重复使用此代码。 所以我需要进行检查,而不是在年份,甚至在一年中的某一天(闰年的问题),但我只能依靠月份的日期和月份数本身。

我的输入数据,人的生日,在Java类“日期”中

javaSE 1.6 有什么方法可以帮到我吗?

我检查了“日期”和“日历”类,但到目前为止我找不到任何提示来解决我的问题。

【问题讨论】:

标签: java date calendar java-6 date-comparison


【解决方案1】:

ThreeTen 反向移植

public static MonthDay toMonthDay(Date utilDate) {
    Instant inst = DateTimeUtils.toInstant(utilDate);
    ZonedDateTime dateTime = inst.atZone(ZoneId.systemDefault());
    return MonthDay.from(dateTime);
}

java.timeMonthDay 类是您所需要的,它是一个没有年份的日期,或者相反,是一个月和一个月中的某一天。生日和其他要记住的日子是使用它的主要例子。

像这样:

    Date birthday = // ...
    Date today = new Date();
    if (toMonthDay(today).equals(toMonthDay(birthday))) {
        System.out.println("It’s her birthday");
    } else {
        System.out.println("It’s not her birthday");
    }

在 Java 6 上,您需要使用 ThreeTen-Backportjava.time 的向后移植到 Java 6 和 7。

我正在犹豫使用ZoneId.systemDefault() 来使用 JVM 的时区设置进行转换。一方面,Date 通常会采用这个时区;另一方面,这很脆弱,因为可以随时从程序的其他部分或在同一 JVM 中运行的其他程序更改设置。如果您知道得更好,请务必给出一个时区,例如 ZoneId.of("America/Adak")

如果使用 Java 8 或更高版本以及内置的java.time,则转换会简单一些:

    ZonedDateTime dateTime = utilDate.toInstant().atZone(ZoneId.systemDefault());
    return MonthDay.from(dateTime);

链接

【讨论】:

    【解决方案2】:

    我找到了在日历类中调用月份和日期的方法。

    这是我的解决方案,我没有找到关于这个主题的任何其他示例,所以我会粘贴,也许将来可以帮助某人。

    如果您有更时尚的解决方案,请告诉我。 我会很高兴学习:)

        // date of the B-day 31st December
        int month = Calendar.DECEMBER;
        int date = 31;
    
        boolean status = false; 
    
        // Class Date already filled with the date we wanna check.
        Date beginDate;
    
        Calendar c = Calendar.getInstance();
        c.setTime(beginDate); 
        int dayOfMonthToCompare = c.get(Calendar.DAY_OF_MONTH);
        int monthToCompare = c.get(Calendar.MONTH);
    
        //perform check on day and Month
        if(dayOfMonthToCompare == date && monthToCompare == month){
            status = true;
        }
    

    【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2022-01-12
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2016-12-31
    相关资源
    最近更新 更多