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

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

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

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

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

5 ответов


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

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

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

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

String[] namesOfDays = DateFormatSymbols.getInstance().getShortWeekdays()

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);

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


tl; dr

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

java.время

на Joda Времени, теперь режим обслуживания, советует миграцию в java.время классы. Много Явы.время портированы на 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.время

на java.время framework встроен в Java 8 и более поздние версии. Эти классы вытесняют беспокойных старых наследие классы даты и времени, такие как java.util.Date, Calendar, & SimpleDateFormat.

на Joda Времени, теперь режим обслуживания, советует миграцию в java.время классы.

чтобы узнать больше, см. В Oracle Учебник. И search Stack Overflow для многих примеров и объяснений. Спецификация JSR 310.

где получить java.время занятий?

  • Java SE 8 и SE 9 и позже
    • встроенный.
    • часть стандартного API Java со встроенной реализацией.
    • Java 9 добавляет некоторые незначительные функции и исправления.
  • Java SE 6 и SE 7
    • большая часть java.функциональность времени портированы с Java 6 и 7 в ThreeTen-Backport.
  • Android

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

DateFormatSymbols.getWeekdays()

Returns: строки буднего дня. Используйте Календарь.Воскресенье, календарь.ПОНЕДЕЛЬНИК, так далее. индексировать массив результатов.


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

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]);