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

时间:2016-05-11 18:00:59

标签: java calendar java-time

我想用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));

打印当月的日期(例如5月)。

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

2 个答案:

答案 0 :(得分:6)

您有YearMonth个对象。对于每月的每一天,您都可以致电atDay(dayOfMonth)以在该月的特定日期返回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

答案 1 :(得分:0)

这可能是一个'黑客'解决方案,但如果你想为任何年制作日历,你可能不得不使用'锚定日期'(例如1月1日) ,1800周三)。然后,您可以计算1800年1月1日至当前年/月/日之间发生的天数。一旦你弄清楚已经过了多少天,使用Modular 7就可以确定它是哪一天,然后从那里填充当月的日历。