тл; д-р
Використання 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-Time
ОНОВЛЕННЯ: Проект 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 . І шукайте переповнення стека за багатьма прикладами та поясненнями. Специфікація - JSR 310 .
Де отримати класи java.time?
Проект ThreeTen-Extra розширює java.time додатковими класами. Цей проект є доказом можливих майбутніх доповнень до java.time. Ви можете знайти деякі корисні класи тут , такі як Interval
, YearWeek
, YearQuarter
, і більш .