我想用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是星期日(下周)等?
答案 0 :(得分:6)
您有YearMonth
个对象。对于每月的每一天,您都可以致电atDay(dayOfMonth)
以在该月的特定日期返回LocalDate
。使用LocalDate
,您可以调用:
getDayOfMonth()
以int
; getDayOfWeek()
以DayOfWeek
为单位获取星期几。这是一周中所有日子的列举。因此,您应该将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就可以确定它是哪一天,然后从那里填充当月的日历。