Как получить первый день недели для определенного региона / страны - PullRequest
0 голосов
/ 17 сентября 2018

Мне нужно получить первый день недели для определенной локали / страны.

Я пытался найти его, используя этот код:

final Locale[] locales = new Locale[]{
        new Locale("en_GB"),
        new Locale("ru_RU"),
        new Locale("en_US"),                
        new Locale("es_ES"),
        new Locale("fr_FR"),        
        new Locale("iw_IL"),
        new Locale("he_IL")
};

for (final Locale locale : locales) {
    final Calendar cal = Calendar.getInstance(locale);
    final int firstDayOfWeek = cal.getFirstDayOfWeek();
    System.out.println(firstDayOfWeek);
}

Результат этого кода таков:все эти локали получают «1», что является воскресеньем, и локали, такие как en_US, должны возвращать 2, то есть понедельник.

Ответы [ 2 ]

0 голосов
/ 17 сентября 2018

Передавайте два аргумента - language & country , отдельно - вместо строки с подчеркиванием.См. Oracle Tutorial .

final Locale[] locales = new Locale[]{
        new Locale("en", "GB"),  // Pass language code, then country code, separately.
        new Locale("ru", "RU"),
        new Locale("en", "US"),
        new Locale("es", "ES"),
        new Locale("fr", "FR"),
        new Locale("iw", "IL"),
        new Locale("he", "IL")
    };

. И тогда я бы использовал Java8, чтобы получить первый день недели:

DayOfWeek firstDayOfWeek = WeekFields.of(locale).getFirstDayOfWeek();
System.out.println(firstDayOfWeek);

Вывод:

ПОНЕДЕЛЬНИК

ПОНЕДЕЛЬНИК

ВОСКРЕСЕНЬЕ

ПОНЕДЕЛЬНИК

ПОНЕДЕЛЬНИК

ВОСКРЕСЕНЬЕ

ВОСКРЕСЕНЬ

0 голосов
/ 17 сентября 2018

Вы ошиблись при инициализации Locale, вам нужно передать два аргумента language и country .Конструктор с одним аргументом предназначен только для языка .

Например, для Locale("en_GB") должно быть Locale("en", "GB"), а затем результат будет 2.

Кстати, для Locale("en", "US") результат равен 1 (воскресенье).

...