[英]Get start date and end date from week/month/year
我需要从给定的年份和星期中提取开始日期和结束日期,并将它们作为 LocalDate 返回:
示例:年/月/周:2022 / 12 / 49 -> date_begin 05/12/2022 - date_end 11/12/2022 这意味着 2022 年的第 49 周从 05/12/2022 开始并在 11/ 结束12/2022。 正如@rzwitserloot 在评论中所说,月份无关紧要。 输入以 int int year = 2022
和int week = 49
的形式提供。
如何做到这一点?
JSR310-extra 有YearWeek
,但更简单的java.time
没有——因此,最简单的方法是通过解析器,即使你实际上不需要解析它:
int weekYear = 2022;
int weekNum = 49;
LocalDate monday = LocalDate.parse(String.format("%04d-W%02d-1", weekYear, weekNum), DateTimeFormatter.ISO_WEEK_DATE);
LocalDate sunday = monday.plusDays(6);
System.out.printf("Week %d of year %d runs from %s to %s\n", weekNum, weekYear, monday, sunday);
注意:格式例如为 2022-W49-1; 1 代表“星期一”。 请注意,这是周年:这意味着开始日期可能在上一年(例如,某些年份的第 1 周从上一年的 12 月 30 日开始),或者结束日期可能在下一年。 如果您考虑一下,这是显而易见的(存在从一年开始到下一年结束的周,并且它们必须是某年“周-年”系统的一部分)。 只是想我会强调它:)
此解决方案也有效
import java.time.DayOfWeek;
import java.time.LocalDate;
import java.time.temporal.WeekFields;
public class Main {
public static final WeekFields US_WEEK_FIELDS = WeekFields.of(DayOfWeek.SUNDAY, 4);
public static void main(String[] args) {
LocalDate date1 = LocalDate.of(2022, 12, 29);
LocalDate date2 = LocalDate.now();
System.out.println(formatDate(date1));
System.out.println(formatDate(date2));
}
public static int getWeek(LocalDate date) {
return date.get(US_WEEK_FIELDS.weekOfWeekBasedYear());
}
public static int getMonth(LocalDate date) {
return date.getMonthValue();
}
public static int getYear(LocalDate date) {
return date.get(US_WEEK_FIELDS.weekBasedYear());
}
public static String formatDate(LocalDate date) {
int week = getWeek(date);
int month = getMonth(date);
int year = getYear(date);
return year + "/" + month + "/" + week;
}
}
运行时我进入控制台
2022/12/52
2022/12/49
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.