java - 计算给定生日的下一个生日日期?
问题描述
给定生日(在 Date 对象中)计算下一个生日的最简单方法是什么?
我相信 java.time 是人们趋之若鹜的图书馆。
下面的解决方案显示了如何找到一周中的第二天,但文档似乎不支持这种情况。如何获得与下一次出现的小时、分钟相对应的 DateTime?
谢谢!
解决方案
假设 - 你有一个java.util.Date
输入,你想要一个java.util.Date
输出。
第一个建议——停止使用java.util.Date
。较新的java.time
API 实现得更好,一旦您习惯了使用它,就更容易使用
好的,首先,我们要将 转换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
back转换为java.util.Date
public Date toUtilDate(LocalDate dateToConvert) {
return java.util.Date.from(dateToConvert.atStartOfDay()
.atZone(ZoneId.systemDefault())
.toInstant());
}
但这引发了一系列关于你为什么要打扰的问题(回到java.util.Date
)。一旦您可以退出该 API 并进入较新的java.time
API,您应该尝试并留在那里(恕我直言)
nb从将日期转换为 LocalDate 或 LocalDateTime 并返回的日期对话
“from”和“with”似乎是最有希望的..但最终不支持这个用例(即不能给 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));
推荐阅读
- sql - sql查询到pl sql过程
- reactjs - Motion-Frame 与 Intersection Observer map() 并将 refs 作为道具传递
- java - log4j 在 .nfsXXXX 而不是 .log 文件中打印日志
- ios - 为什么我不能用 AVPlayer 播放某些 .m3u8 项目?
- c# - 如何确定用户输入的格式是否为 5,3,然后我需要将其转换为 5.3,反之亦然,然后在 dotnet 中执行计算
- singlestore - 在 Mem SQL 中按顺序排列为 Null
- javascript - 如何在 Node.js 上流畅的 FFmpeg 编辑中在 React JS 中制作进度条?
- javascript - 从 VBA 到 JS 的转换 - 错误的输出
- javascript - HTML5 选项卡,包括表单和提交按钮
- http - Envoy:“上游连接错误或在标头之前断开/重置。重置原因:连接失败”