Как установить первый день недели в календаре Java-приложения
Мы используем Java-приложение, у него есть поле выбора даты, при нажатии на который открывается маленький календарь. Первый день недели там воскресенье. Но я хочу, чтобы это был понедельник. Я пытаюсь изменить его из панели управления Windows в настройках даты. Например, я установил первый день в календаре Windows на четверг. Но в календаре Java-приложения первый день недели по-прежнему воскресенье. Можно ли изменить первый день недели для Java-приложения в Windows или только в коде Java-приложения?
С уважением
5 ответов
Какой фреймворк использует ваше Java-приложение? Каким компонентом является поле выбора даты?
В Java Calendar
первый день недели по умолчанию определяется настройкой локали вашей системы.
Так что если вы не можете изменить исходный код вашего приложения:
- вы можете изменить язык вашей операционной системы (в вашем случае Windows)
- или вы можете использовать различные аргументы командной строки, такие как
-Duser.country
или же-Duser.region for
Java при запуске вашего JVM. Посмотрите здесь.
Вы можете использовать метод setFirstDayOfWeek(), чтобы установить первый день недели. Метод может влиять только на возвращаемые значения WEEK_OF_MONTH или WEEK_OF_YEAR. Для DAY_OF_WEEK это ничего не делает.
Вы можете реализовать что-то вроде:
Calendar cal = Calendar.getInstance();
cal.setFirstDayOfWeek(Calendar.MONDAY);
int rec = cal.get(Calendar.WEEK_OF_MONTH);
System.out.println(rec);
Подробнее об API ЗДЕСЬ
Если вы хотите установить понедельник, используйте
Calendar currentCalendar = Calendar.getInstance(new Locale("en","UK"));
Если вы хотите установить воскресенье, используйте
Calendar currentCalendar = Calendar.getInstance(new Locale("en","US"));
Calendar now = Calendar.getInstance();
System.out.println("Current date : " + (now.get(Calendar.MONTH) + 1) + "-"
+ now.get(Calendar.DATE) + "-" + now.get(Calendar.YEAR));
String[] strDays = new String[] { "Sunday", "Monday", "Tuesday", "Wednesday", "Thusday",
"Friday", "Saturday" };
// Day_OF_WEEK starts from 1 while array index starts from 0
System.out.println("Current day is : " + strDays[now.get(Calendar.DAY_OF_WEEK) - 1]);
короче одним словом:
WeekFields.of(DayOfWeek.MONDAY, 1)
это какой-то пример:
int weekOfYear1 = LocalDateTime.parse("2023-01-02 00:00:00", DateTimeFormatter.ofPattern("yyyy-MM-dd HH:mm:ss"))
.get(WeekFields.SUNDAY_START.weekOfWeekBasedYear());
int weekOfYear2 = LocalDateTime.parse("2023-01-02 00:00:00", DateTimeFormatter.ofPattern("yyyy-MM-dd HH:mm:ss"))
.get(WeekFields.ISO.weekOfWeekBasedYear());
int weekOfYear3 = LocalDateTime.parse("2023-01-02 00:00:00", DateTimeFormatter.ofPattern("yyyy-MM-dd HH:mm:ss"))
.get(WeekFields.of(DayOfWeek.MONDAY, 1).weekOfWeekBasedYear());
weekOfYear1 is 1
weekOfYear1 is 1
weekOfYear1 is 2