если вам нужно, чтобы выходные данные были Tue, а не 3 (Дни недели индексируются, начиная с 1 для воскресенья, см. Календарь.ВОСКРЕСЕНЬЕ), вместо просмотра календаря, просто переформатируйте строку: new SimpleDateFormat("EE").format(date) (EE что означает "день недели, сокращенная версия")
если у вас есть входные данные в виде строки, а не Date, вам следует использовать SimpleDateFormat для их синтаксического анализа: new SimpleDateFormat("dd/M/yyyy").parse(dateString)
вы можете использовать joda-time's DateTime и вызывать dateTime.dayOfWeek() и / или DateTimeFormat.
редактировать: начиная с Java 8, теперь вы можете использовать пакет java.time вместо joda-time
LocalDate.parse( // Generate `LocalDate` object from String input. "23/2/2010" , DateTimeFormatter.ofPattern( "d/M/uuuu" ) ) .getDayOfWeek() // Get `DayOfWeek` enum object. .getDisplayName( // Localize. Generate a String to represent this day-of-week. TextStyle.SHORT_STANDALONE , // How long or abbreviated. Some languages have an alternate spelling for "standalone" use (not so in English). Locale.US // Or Locale.CANADA_FRENCH and such. Specify a `Locale` to determine (1) human language for translation, and (2) cultural norms for abbreviation, punctuation, etc. )
если требуется только порядковый номер дня, как его можно получить?
Вместо порядкового номера рассмотрите возможность передачи DayOfWeek объекта enum, такого как DayOfWeek.TUESDAY. Имейте в виду, что a DayOfWeek - это смарт-объект, а не просто строка или простое целое число. Использование этих объектов enum делает ваш код более самодокументируемым, гарантирует допустимые значения и обеспечивает безопасность типов.
Но если вы настаиваете, спросите DayOfWeek число. Вы получите 1-7 для понедельника-воскресенья в соответствии со стандартом ISO 8601.
Вот пример кода с использованием библиотеки Joda-Time версии 2.4, как упомянуто в принятом ответе Божо. Joda-Time намного превосходит java.util.Date /.Классы календаря в комплекте с Java.
LocalDate
Joda-Time предлагает LocalDate класс для представления только даты без указания времени суток или часового пояса. Именно то, к чему призывает этот вопрос. Старая java.util.Date/.Классы календаря, поставляемые в комплекте с Java, лишены этой концепции.
Извлеките из значения даты номер и название дня недели.
intdayOfWeek= localDate.getDayOfWeek(); // Follows ISO 8601 standard, where Monday = 1, Sunday = 7. Localelocale= Locale.US; // Locale specifies the human language to use in determining day-of-week name (Tuesday in English versus Mardi in French). DateTimeFormatterformatterOutput= DateTimeFormat.forPattern( "E" ).withLocale( locale ); Stringoutput= formatterOutput.print( localDate ); // 'E' is code for abbreviation of day-of-week name. See Joda-Time doc. StringoutputQuébécois= formatterOutput.withLocale( Locale.CANADA_FRENCH ).print( localDate );
Проект ThreeTen-Extra расширяет java.time дополнительными классами. Этот проект является испытательным полигоном для возможных будущих дополнений к java.time. Здесь вы можете найти несколько полезных классов, таких как Interval, YearWeek, YearQuarter и больше.