Android, Как можно получить информацию о том, какой день недели является начальным в системном регионе?

Рейтинг: 1Ответов: 2Опубликовано: 18.08.2023

Например, в России неделя начинается с понедельника, в США с воскресенья и т.д. Я нигде про это ничего не нашёл

Ответы

▲ 2Принят

В Java Date/Time API есть класс WeekFields, содержащий среди прочего информацию о первом дне недели, которую можно получить при помощи метода getFirstDayOfWeek.

Соответственно, получить экземпляр этого класса можно при помощи метода WeekFields::of(Locale locale), а системную локаль можно получить при помощи метода Locale.getDefault().

Аналогично, в устаревшем классе Calendar есть подобный метод Calendar::getFirstDayOfWeek, возвращающий целочисленную константу (1 - воскресенье (!), ... 7 - суббота).

Пример кода:

import java.util.*;
import java.time.*;
import java.time.temporal.*;

var locales = Arrays.asList(
    Locale.getDefault(),
    new Locale("ru", "RU"),
    new Locale("fr", "FR"),
    new Locale("ar", "DZ")
);

for(Locale loc : locales) {
    DayOfWeek firstDayOfWeek = WeekFields.of(loc).getFirstDayOfWeek();
    Calendar cal = Calendar.getInstance(loc);
    System.out.println(loc.getDisplayCountry() + "\t-> first day: " + firstDayOfWeek 
        + "\tcalendar: " + cal.getFirstDayOfWeek());
}

Результат:

United States   -> first day: SUNDAY    calendar: 1
Russia  -> first day: MONDAY    calendar: 2
France  -> first day: MONDAY    calendar: 2
Algeria -> first day: SATURDAY  calendar: 7
▲ 1

Через обычный Calendar:

Calendar calendar = Calendar.getInstance();
int first_day_of_week_def = calendar.getFirstDayOfWeek();

Полноценная настройка появится в Android 14, смотрите Regional preferences.

LocalePreferences.getFirstDayOfWeek();