计算下一个生日日期给定一个 birhdate?



给定出生日期(在 Date 对象中(计算下一个生日的最简单方法是什么?

我相信java.time是人们趋向的库。

下面的解决方案显示了如何查找一周中的第二天,但文档似乎不支持此方案。如何获取与下一次出现的小时、分钟相对应的日期时间?

谢谢!

假设 - 您有一个java.util.Date输入,并且想要一个java.util.Date输出。

第一个建议 - 停止使用java.util.Date. 较新的java.timeAPI实现得更好,一旦您习惯使用它,就更容易使用

好的,首先,我们想将java.util.Date转换为java.time.LocalDate...

public LocalDate toLocalDate(Date dateToConvert) {
return dateToConvert.toInstant()
.atZone(ZoneId.systemDefault())
.toLocalDate();
}

从那里开始,这是一个简单的案例,只需再增加一年......

LocalDate nextBirthDate = toLocalDate(someDate).plusYear(1);

请记住,java.time对象是不可变的。

最后,如果需要,您可以将LocalDate转换回java.util.Date

public Date toUtilDate(LocalDate dateToConvert) {
return java.util.Date.from(dateToConvert.atStartOfDay()
.atZone(ZoneId.systemDefault())
.toInstant());
}

但这引发了一堆关于你为什么要打扰的问题(回到java.util.Date(。 一旦你可以离开那个 API 并进入更新的java.timeAPI,你应该尝试留在那里(恕我直言(

nb从"将日期转换为本地日期"或"本地日期时间"的日期对话

">

从"和"与"似乎是最有希望的。但最终不支持此用例(即无法给定 LocalDate 的下一个实例给定日和月(

仍然没有看到问题。 以下示例采用原始出生日期、当前出生日期,并根据当前"年份日期"是在今天之前还是之后来确定"下一个"出生日期

LocalDate orignalBirthDate = LocalDate.of(1972, Month.MARCH, 8);
LocalDate today = LocalDate.now();
int year = today.getYear();
LocalDate nextBirthDate = orignalBirthDate.withYear(year);
if (nextBirthDate.isBefore(today)) {
nextBirthDate = nextBirthDate.plusYears(1);
}
System.out.println("Next birthday = " + DateTimeFormatter.ofLocalizedDate(FormatStyle.MEDIUM).format(nextBirthDate));
public Date getBirthDay(Date d) {
Calendar cal = Calendar.getInstance();
cal.setTime(d);
cal.set(Calendar.YEAR, Calendar.getInstance().get(Calendar.YEAR));
if (new Date().after(cal.getTime())) cal.set(Calendar.YEAR, cal.get(Calendar.YEAR) + 1);
return cal.getTime();
}

最新更新