Вопрос-ответ

How to determine day of week by passing specific date?

Как определить день недели, передавая определенную дату?

Например, у меня есть дата: "23/2/2010" (23 февраля 2010 г.). Я хочу передать ее функции, которая вернет день недели. Как я могу это сделать?

В этом примере функция должна возвращать String "Вт".

Кроме того, если требуется просто порядковый номер дня, как его можно получить?

Переведено автоматически
Ответ 1

ДА. В зависимости от вашего конкретного случая:


  • Вы можете использовать java.util.Calendar:


    Calendar c = Calendar.getInstance();
    c.setTime(yourDate);
    int dayOfWeek = c.get(Calendar.DAY_OF_WEEK);

  • если вам нужно, чтобы выходные данные были 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


Ответ 2
  String inputDate = "01/08/2012";
SimpleDateFormat format1 = new SimpleDateFormat("dd/MM/yyyy");
Date dt1 = format1.parse(input_date);
DateFormat format2 = new SimpleDateFormat("EEEE");
String finalDay = format2.format(dt1);

Используйте этот код для поиска названия дня по введенной дате.Простой и хорошо протестированный.

Ответ 3

Просто используйте SimpleDateFormat.

SimpleDateFormat sdf = new SimpleDateFormat("dd/MM/yyyy", java.util.Locale.ENGLISH);
Date myDate = sdf.parse("28/12/2013");
sdf.applyPattern("EEE, d MMM yyyy");
String sMyDate = sdf.format(myDate);

Результат: Сб, 28 Дек 2013

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

public SimpleDateFormat(String pattern) {
this(pattern, Locale.getDefault(Locale.Category.FORMAT));
}
Ответ 4

tl; dr

Использование 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 /.Классы календаря в комплекте с Java.

LocalDate

Joda-Time предлагает LocalDate класс для представления только даты без указания времени суток или часового пояса. Именно то, к чему призывает этот вопрос. Старая java.util.Date/.Классы календаря, поставляемые в комплекте с 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. И найдите в Stack Overflow множество примеров и пояснений. Спецификация - JSR 310.

Где взять классы java.time?

Проект ThreeTen-Extra расширяет java.time дополнительными классами. Этот проект является испытательным полигоном для возможных будущих дополнений к java.time. Здесь вы можете найти несколько полезных классов, таких как Interval, YearWeek, YearQuarter и больше.

java date