2016-05-11 3 views
5

Я хочу, чтобы создать календарь с 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 - воскресенье (на следующей неделе) и т. Д.?

ответ

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())); 

Это будет печатать каждый день этого месяца с последующим соответствующий день недели.

В качестве дополнительной заметки вы можете получить реальную отображаемую стоимость за день недели (вместо name() перечисления, как указано выше), позвонив по номеру getDisplayName(style, locale). Стиль описывает, как писать дни (длинная форма, короткая форма ...), а локаль - это язык, используемый для отображаемого имени. Примером может служить:

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

, который выведет полный текст дня недели на английском языке. Пример выходных данных 04/2016 с выше изменениями:

1 Friday 
2 Saturday 
3 Sunday 
4 Monday 
5 Tuesday 
+0

Ваш ответ был настолько детализирован и решение было очень простым. Спасибо – dios231

0

Это может быть немного «халтурой» решений, но если вы пытаетесь сделать календарь для любого года, возможно, придется использовать «дата якоря» (например, 1 января 1800 года в среду). Затем вы можете рассчитать количество дней, которые произошли между 1 января 1800 года и вашим текущим годом/месяцем/днем. После того, как вы выяснили, сколько дней прошло, используя Modular 7, вы можете определить, в какой день это, а затем заполнить календарь для этого месяца.

+0

У этого подхода есть проблема, что «рассчитать количество дней, которые произошли между 1 января 1800 года и вашим текущим годом/месяцем/днем», может быть удивительно сложным. Временные интервалы время от времени меняются из-за политических решений. – Hulk

Смежные вопросы