ТЛ; др
Используя java.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.
)
вторник
Посмотрите, как этот код запускается на IdeOne.com (но Locale.US
работает только там).
java.time
Посмотрите мой пример кода выше, и посмотрите правильный ответ для java.time от Przemek .
Порядковый номер
если нужен только порядковый номер дня, как его можно получить?
Для порядкового номера рассмотрите возможность обойти DayOfWeek
объект enum, например DayOfWeek.TUESDAY
. Помните, что a DayOfWeek
- это смарт-объект, а не просто строка или целое число. Использование этих объектов enum делает ваш код более самодокументируемым, обеспечивает допустимые значения и обеспечивает безопасность типов .
Но если вы настаиваете, попросите DayOfWeek
номер . Вы получаете 1-7 за понедельник-воскресенье по стандарту ISO 8601 .
int ordinal = myLocalDate.getDayOfWeek().getValue() ;
Joda времени
ОБНОВЛЕНИЕ: проект Joda-Time сейчас находится в режиме обслуживания. Команда советует перейти на классы java.time. Инфраструктура java.time встроена в Java 8 (а также перенесена обратно в Java 6 и 7 и дополнительно адаптирована для Android ).
Вот пример кода с использованием библиотеки Joda-Time версии 2.4, как упомянуто в принятом ответе Божо . Joda-Time намного превосходит классы java.util.Date/.Calendar, связанные с Java.
LocalDate
Joda-Time предлагает LocalDate
классу представлять только дату без какого-либо времени суток или часового пояса. Как раз то, к чему призывает этот Вопрос. Старые классы java.util.Date/.Calendar в комплекте с Java не имеют этой концепции.
Анализировать
Разобрать строку в значение даты.
String input = "23/2/2010";
DateTimeFormatter formatter = DateTimeFormat.forPattern( "d/M/yyyy" );
LocalDate localDate = formatter.parseLocalDate( input );
экстракт
Извлечение из значения даты день недели номер и название.
int dayOfWeek = localDate.getDayOfWeek(); // Follows ISO 8601 standard, where Monday = 1, Sunday = 7.
Locale locale = Locale.US; // Locale specifies the human language to use in determining day-of-week name (Tuesday in English versus Mardi in French).
DateTimeFormatter formatterOutput = DateTimeFormat.forPattern( "E" ).withLocale( locale );
String output = formatterOutput.print( localDate ); // 'E' is code for abbreviation of day-of-week name. See Joda-Time doc.
String outputQuébécois = formatterOutput.withLocale( Locale.CANADA_FRENCH ).print( localDate );
свалка
Дамп на консоль.
System.out.println( "input: " + input );
System.out.println( "localDate: " + localDate ); // Defaults to ISO 8601 formatted strings.
System.out.println( "dayOfWeek: " + dayOfWeek );
System.out.println( "output: " + output );
System.out.println( "outputQuébécois: " + outputQuébécois );
Бегать
Когда беги.
input: 23/2/2010
localDate: 2010-02-23
dayOfWeek: 2
output: Tue
outputQuébécois: mar.
О java.time
Java.time каркас встроен в Java 8 и более поздних версий. Эти классы вытеснять неприятные старые устаревшие классы даты и времени , такие как java.util.Date
, Calendar
, и SimpleDateFormat
.
Проект Joda-Time , находящийся сейчас в режиме обслуживания , рекомендует перейти на классы java.time .
Чтобы узнать больше, смотрите Oracle Tutorial . И поиск переполнения стека для многих примеров и объяснений. Спецификация JSR 310 .
Где взять классы java.time?
Проект ThreeTen-Extra расширяет java.time дополнительными классами. Этот проект является полигоном для возможных будущих дополнений к java.time. Вы можете найти некоторые полезные классы здесь , такие как Interval
, YearWeek
, YearQuarter
, и более .