Как установить первый день недели в календаре 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
Другие вопросы по тегам