В Java, как получить строки дней недели (вс, пн, сб) с локалью системы по умолчанию (язык)

Самый простой способ:

String[] namesOfDays = new String[7] {
    "SUN", "MON", "TUE", "WED", "THU", "FRI", "SAT"
};

Этот метод не использует Locale. Поэтому, если язык системы не английский, этот метод не работает должным образом.

Используя время Joda, мы можем сделать так:

String[] namesOfDays = new String[7];
LocalDate now = new LocalDate();

for (int i=0; i<7; i++) {
    /* DateTimeConstants.MONDAY = 1, TUESDAY = 2, ..., SUNDAY = 7 */
    namesOfDays[i] = now.withDayOfWeek((DateTimeConstants.SUNDAY + i - 1) % 7 + 1)
        .dayOfWeek().getAsShortText();
}

Однако этот метод использует сегодняшнюю дату и расчеты календаря, которые бесполезны для конечной цели. Кроме того, это немного сложно.

Есть ли простой способ получить такие строки, как "Sun", "Mon",..., "Sat" с языковым стандартом системы по умолчанию?


person Naetmul    schedule 14.05.2013    source источник


Ответы (6)


Если я вас правильно понял

 calendar.getDisplayName(Calendar.DAY_OF_WEEK, Calendar.SHORT, Locale.US);

это то, что вы ищете. здесь вы можете найти документацию,

Или вы также можете использовать getShortWeekdays().

String[] namesOfDays = DateFormatSymbols.getInstance().getShortWeekdays()
person Blackbelt    schedule 14.05.2013
comment
Есть ли статический метод? Calendar.getDisplayName также нуждается в экземпляре. - person Naetmul; 14.05.2013
comment
Я сам нашел ответ. String[] nameOfDays = DateFormatSymbols.getInstance().getShortWeekdays(); получит массив строк. - person Naetmul; 14.05.2013
comment
Если вам нужно указать локаль, вы можете использовать DateFormatSymbols.getInstance(locale).getShortWeekdays(). - person Naetmul; 23.08.2017
comment
К вашему сведению, эти классы даты и времени были вытеснены много лет назад классами java.time, определенными в JSR 310. - person Basil Bourque; 20.05.2019

Date now = new Date();
// EEE gives short day names, EEEE would be full length.
SimpleDateFormat dateFormat = new SimpleDateFormat("EEE", Locale.US); 
String asWeek = dateFormat.format(now);

Вы можете создать дату с желаемой датой и временем. И добиться желаемого.

person Juned Ahsan    schedule 14.05.2013

tl;dr

DayOfWeek.MONDAY.getDisplayName( 
    TextStyle.SHORT , 
    Locale.getDefault() 
)

Java.время

Проект Joda-Time, теперь в режим обслуживания, советует перейти на java.time. Большая часть java.time портирована на Android (см. ниже).

DayOfWeek

Перечисление DayOfWeek определяет семь объектов, по одному для каждого дня недели. Класс предлагает несколько удобных методов, включая getDisplayName для генерации строки с локализованным названием дня.

Для локализации укажите:

  • TextStyle, чтобы определить, как долго или сокращена должна быть строка.
  • Locale для определения (а) человеческого язык для перевода названия дня, названия месяца и т. д. и (б) культурные нормы, решающие вопросы аббревиатуры, использования заглавных букв, пунктуации, разделителей и т. д.

Пример:

String output = DayOfWeek.MONDAY.getDisplayName( TextStyle.SHORT , Locale.CANADA_FRENCH );

Вы можете использовать текущий часовой пояс JVM по умолчанию, а не указывать его. Но помните о риске: зона по умолчанию может быть изменена в любой момент во время выполнения любым кодом в любом потоке любого приложения, работающего в JVM.

Locale locale = Locale.getDefault() ;
String output = DayOfWeek.MONDAY.getDisplayName( TextStyle.SHORT , locale );

О java.time

Платформа java.time встроен в Java 8 и более поздние версии. Эти классы заменяют проблемные старые устаревшие классы даты и времени, такие как java.util.Date, Calendar и SimpleDateFormat.

Проект Joda-Time, теперь в режим обслуживания, советует перейти на java.time.

Чтобы узнать больше, см. учебник по Oracle. И поищите множество примеров и пояснений в Stack Overflow. Спецификация: JSR 310.

Где получить классы java.time?

person Basil Bourque    schedule 16.03.2017

Без 1.8 вы можете использовать DateFormatSymbols ( который также работает с Android).

DateFormatSymbols.getWeekdays()

Возвращает: строки дня недели. Используйте Calendar.SUNDAY, Calendar.MONDAY и т. д. для индексации массива результатов.

person yincrash    schedule 10.07.2018

Я думаю, что мой код полезен. Вы можете легко изменить его для своих целей.

Результирующий массив строк: «Сб», «Вс», «Пн», «Вт», «Ср», «Чт» и «Пт».

    public String[] getNameOfDays(){
        SimpleDateFormat sdf_day_of_week = new SimpleDateFormat("EEE", Locale.getDefault());
        String[] nameOfDays = new String[7];

        Calendar calendar = Calendar.getInstance();

        for(int i=0; i<7; i++) {
            calendar.set(Calendar.DAY_OF_WEEK, i);
            nameOfDays[i] = sdf_day_of_week.format(calendar.getTime());
        }

        return nameOfDays;
    }
person mazend    schedule 02.04.2020
comment
Пожалуйста, не учите молодежь пользоваться давно устаревшим и заведомо проблемным классом SimpleDateFormat. По крайней мере, не в качестве первого варианта. И не без оговорок. Сегодня у нас намного лучше java.time, современный API даты и времени Java, и его DateTimeFormatter. Да, вы можете использовать его на Android. Для более старых версий Android см. Как использовать ThreeTenABP в проекте Android. - person Ole V.V.; 03.04.2020
comment
@ОлеВ.В. Ой. Я не знал, что SimpleDateFormat и другие старые классы даты и времени вызывают проблемы. Спасибо, что сообщили мне. - person mazend; 04.04.2020

Пожалуйста, попробуйте это

public static String[] namesOfDays =  {"SUN", "MON", "TUE", "WED", "THU", "FRI", "SAT"};


 int day = Calendar.getInstance().get(Calendar.DAY_OF_WEEK);

System.out.println("Day := "+namesOfDays[day-1]);
person Nitin Karale    schedule 23.11.2013
comment
Я думаю, он хочет локализовать дни. - person Scott Merritt; 13.09.2014