检查日期是否与年份无关

时间:2018-04-16 16:10:45

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

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

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

我的输入数据,人的生日那天,它是在Java类“Date”

是否有任何javaSE 1.6方法可以帮助我?

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

2 个答案:

答案 0 :(得分:1)

ThreeTen Backport

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

MonthDay java.timeThreeTen-Backport是你需要的,它是没有年份的日期,或者相反,是一个月和一个月的日期。生日和其他需要记住的日子是其使用的主要例子。

像这样:

    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上,您需要使用Oracle tutorial: Date Timejava.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);

链接

答案 1 :(得分:0)

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

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

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

Sigma <- matrix(c(1.0, .71, .71, 1.0), 2, 2, byrow=TRUE)
m <- ordsample(N, marginal, Sigma)
> m
       [,1] [,2]
  [1,]    1    1
  [2,]    1    2
  ....