Я думаю, что вы используете не правильный подход.Работа с датой относится к работе с Locale
, потому что все эти имена, такие как имя месяца, дни недели в другом формате, уже есть в JVM.Вы должны использовать его:
public static void printCalendar(LocalDate date, Locale locale) {
DateFormatSymbols symbols = new DateFormatSymbols(locale);
WeekFields weekFields = WeekFields.of(locale);
printMonthName(symbols, date);
printWeekdayNames(symbols, weekFields);
printWeekdays(weekFields, date);
}
private static void printMonthName(DateFormatSymbols symbols, LocalDate date) {
System.out.println(symbols.getMonths()[date.getMonthValue() - 1]);
}
private static void printWeekdayNames(DateFormatSymbols symbols, WeekFields weekFields) {
String[] weekdays = symbols.getShortWeekdays();
DayOfWeek firstDayOfWeek = weekFields.getFirstDayOfWeek();
int offs = firstDayOfWeek == DayOfWeek.SUNDAY ? 1 : firstDayOfWeek.ordinal() + 2;
for (int i = 0; i < 7; i++)
System.out.print('\t' + (offs + i >= weekdays.length ? weekdays[(offs + i) % 7] : weekdays[offs + i]));
System.out.println();
}
private static void printWeekdays(WeekFields weekFields, LocalDate date) {
LocalDate cur = date.withDayOfMonth(1).with(weekFields.dayOfWeek(), 1);
boolean stop = false;
do {
if (cur.getMonthValue() == date.getMonthValue())
System.out.format("\t%2d", cur.getDayOfMonth());
else
System.out.format("\t ");
cur = cur.plusDays(1);
if (cur.getDayOfWeek() == weekFields.getFirstDayOfWeek()) {
System.out.println();
stop = cur.getMonthValue() != date.getMonthValue();
}
} while (!stop);
}
Test1:
printCalendar(LocalDate.of(2018, Month.DECEMBER, 17), Locale.US);
December
Sun Mon Tue Wed Thu Fri Sat
1
2 3 4 5 6 7 8
9 10 11 12 13 14 15
16 17 18 19 20 21 22
23 24 25 26 27 28 29
30 31
Test2:
printCalendar(LocalDate.of(2018, Month.DECEMBER, 17), Locale.ITALIAN);
dicembre
lun mar mer gio ven sab dom
1 2
3 4 5 6 7 8 9
10 11 12 13 14 15 16
17 18 19 20 21 22 23
24 25 26 27 28 29 30
31