it-swarm.com.ru

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

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

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" с системным языком по умолчанию?

26
Naetmul

Если я вас не понял

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

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

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

String[] namesOfDays = DateFormatSymbols.getInstance().getShortWeekdays()
44
Blackbelt
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);

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

8
Juned Ahsan

тЛ; др

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

Java.time

Проект 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 framework встроен в Java 8 и более поздние версии. Эти классы вытесняют проблемные старые унаследованные классы даты и времени, такие как Java.util.Date , Calendar , & SimpleDateFormat .

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

Чтобы узнать больше, смотрите Oracle Tutorial . И поиск переполнения стека для многих примеров и объяснений. Спецификация это JSR 310 .

Где взять классы Java.time? 

  • Java SE 8 и SE 9 и более поздние версии
    • Встроенный. 
    • Часть стандартного Java API со встроенной реализацией.
    • Java 9 добавляет некоторые незначительные функции и исправления.
  • Java SE 6 и SE 7
    • Большая часть функциональности Java.time перенесена в Java 6 & 7 в ThreeTen-Backport .
  • Android
4
Basil Bourque

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

DateFormatSymbols.getWeekdays()

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

0
yincrash