Подтвердить что ты не робот

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

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

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

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

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

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 с системным стандартом по умолчанию?

4b9b3361

Ответ 1

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

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

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

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

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

Ответ 2

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

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

Ответ 3

TL;DR

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

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

Чтобы узнать больше, см. Учебник Oracle. И поиск Qaru для многих примеров и объяснений. Спецификация 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

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

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