确定一周中的哪一天是一个月中的每个日期

Determine which day of week is each date of the month

我想用 Java 8 创建一个日历。到目前为止我有这个:

YearMonth yearMonthObject = YearMonth.of(year, month);
int daysOfCurrentMonth = yearMonthObject.lengthOfMonth();

int i = 1;
ArrayList<Integer> Dayes = new ArrayList<Integer>();
for(i=1; i<=daysOfCurrentMonth; i++){
    Dayes.add(i);
}

Dayes.forEach(value -> System.out.print(value));

打印当前月份的天数(例如五月)。

如何确定1是星期日,2是星期一,3是星期二,...,8是星期日(下周)等?

你有一个 YearMonth object. For each day of the month, you can call atDay(dayOfMonth) to return a LocalDate 在那个月的特定日期。有了那个 LocalDate,您就可以调用:

因此,您应该将 Dayes 列表更改为包含 LocalDate 而不是 Integer,然后您可以拥有,例如:

YearMonth yearMonthObject = YearMonth.of(year, month);
int daysOfCurrentMonth = yearMonthObject.lengthOfMonth();

ArrayList<LocalDate> dayes = new ArrayList<LocalDate>();
for(int i = 1; i <= daysOfCurrentMonth; i++){
    dayes.add(yearMonthObject.atDay(i));
}

dayes.forEach(value -> System.out.println(value.getDayOfMonth() + " " + value.getDayOfWeek()));

这将打印该月的每一天,然后是相应的星期几。

作为旁注,您可以通过调用 getDisplayName(style, locale) 获得星期几的真实显示值(而不是上面枚举的 name())。样式表示如何书写日期(长格式、短格式...),区域设置是用于显示名称的区域设置。一个例子是:

value.getDayOfWeek().getDisplayName(TextStyle.FULL, Locale.ENGLISH)

这将以英文输出星期几的全文。具有上述更改的 04/2016 的示例输出:

1 Friday
2 Saturday
3 Sunday
4 Monday
5 Tuesday

这可能有点像 'hack' 解决方案,但如果您要为 任何 年制作日历,您可能必须使用 'anchor date'(如1800年1月1日为星期三)。然后,您可以计算从 1800 年 1 月 1 日到您当前 year/month/day 之间发生的天数。一旦计算出已经过去了多少天,使用 Modular 7 就可以确定今天是哪一天,然后从那里填充该月的日历。