Например, у меня есть дата: «23/2/2010» (23 февраля 2010 г.). Я хочу передать его функции, которая будет возвращать день недели . Как я могу это сделать?
В этом примере функция должна вернуть String
«Tue».
Кроме того, если нужен только порядковый номер дня, как его можно получить?
Calendar
классе, такие какCalendar.SUNDAY
илиCalendar.JANUARY
.Calendar
,Date
иDateTimeFormat
(и Joda время тоже) и использовать Java 8java.time
классов, например ,YearMonth
илиLocalDate
. Смотрите больше в этом ответе .java.util.Date
,java.util.Calendar
иjava.text.SimpleDateFormat
теперь унаследованные , вытеснены классами java.time, встроенными в Java 8 и Java 9. См. Учебное пособие Oracle .Используйте этот код для поиска названия дня по дате ввода. Просто и хорошо проверено.
источник
java.util.Date
,java.util.Calendar
иjava.text.SimpleDateFormat
теперь унаследованные , вытеснены классами java.time, встроенными в Java 8 и Java 9. См. Учебное пособие Oracle .Просто используйте SimpleDateFormat .
Результат: сб, 28 дек 2013
Конструктор по умолчанию принимает локаль «по умолчанию» , поэтому будьте осторожны, когда используете конкретный шаблон.
источник
ТЛ; др
Используя java.time ...
Посмотрите, как этот код запускается на IdeOne.com (но
Locale.US
работает только там).java.time
Посмотрите мой пример кода выше, и посмотрите правильный ответ для java.time от Przemek .
Порядковый номер
Для порядкового номера рассмотрите возможность обойти
DayOfWeek
объект enum, напримерDayOfWeek.TUESDAY
. Помните, что aDayOfWeek
- это смарт-объект, а не просто строка или целое число. Использование этих объектов enum делает ваш код более самодокументируемым, обеспечивает допустимые значения и обеспечивает безопасность типов .Но если вы настаиваете, попросите
DayOfWeek
номер . Вы получаете 1-7 за понедельник-воскресенье по стандарту ISO 8601 .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 не имеют этой концепции.Анализировать
Разобрать строку в значение даты.
экстракт
Извлечение из значения даты день недели номер и название.
свалка
Дамп на консоль.
Бегать
Когда беги.
О 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
, и более .источник
java.time
Использование
java.time
фреймворка, встроенного в Java 8 и выше.Перечисление может создать строку имени дня автоматически локализуется на язык человека и культурные нормы . Укажите, чтобы указать, что вы хотите длинную форму или сокращенное имя.
DayOfWeek
Locale
TextStyle
источник
Вы можете попробовать следующий код:
источник
LocalDate
? Вы читали их перед публикацией?источник
Для Java 8 или новее , Localdate предпочтительнее
Примечание: если input определяется как String / User, то вы должны разобрать его в int .
источник
источник
Еще один «забавный» способ - использовать алгоритм Судного дня . Это более длинный метод, но он также быстрее, если вам не нужно создавать объект Calendar с заданной датой.
источник
Можно использовать следующий фрагмент кода для ввода, например (день = "08", месяц = "05", год = "2015", и вывод будет "СРЕДА")
источник
Ответ в одну строку:
Пример использования:
источник
источник
источник
Существует проблема на хакерранк Java Дата и время
лично я предпочитаю класс LocalDate.
На этот вызов есть одно видео.
Java Date and Time Hackerrank решение
Надеюсь, это поможет :)
источник
Calendar
класс, Обратите внимание , чтоset
метод в календаре занимает месяцы , начиная с 0. т.е.0 for January
. Спасибо!Добавление еще одного способа сделать это в точности так, как запрашивал OP, без использования последних встроенных методов:
источник
SimpleDateFormat
иDate
. В частности, вы не должны использовать устаревшийgetDay
метод, он не надежен. И вы не должны использоватьif
-else
для выбора из 7 значений, это то, что у нас естьswitch
, или вы можете использовать массив. В целом ваш код и длиннее, и сложнее, чем нужно.источник
Программа для определения дня недели, указав дату и месяц ввода пользователем, используя
java.util.scanner
пакет:источник
java.util.Date
,java.util.Calendar
иjava.text.SimpleDateFormat
теперь унаследованные , вытеснены классами java.time, встроенными в Java 8 и Java 9. См. Учебное пособие Oracle .if ((ym%4==0) && (gm==2)){ d=(gd+m[gm-1]+ym+yp+y[a]-1)%7;
Получите значение дня, указав текущее время.
источник
источник
Приведенный ниже метод извлекает семь дней и возвращает короткое имя дня в List Array в Kotlin, хотя вы можете просто переформатировать его в формате Java, просто представляя идею, как Calendar может возвращать короткое имя
поставить результаты как
источник
Calendar
класс в 2019 году. Он плохо спроектирован и давно устарел. Вместо этого я рекомендуюLocalDate
иDayOfWeek
из java.time современный API даты и времени Java .Вы можете использовать метод ниже, чтобы получить день недели, передав определенную дату,
Здесь для метода set класса Calendar, Tricky part - индекс для параметра месяца, который начинается с 0 .
источник
Класс Calendar имеет встроенную функциональность displayName:
Доступно с Java 1.6. Смотрите также документацию Oracle
источник
Это работает правильно ...
Он предоставляет встроенный метод getDayOfWeek (), чтобы получить день определенной недели:
Чтобы присвоить значение enum
l.getDayOfWeek()
строке, вы, вероятно, могли бы использовать вызванный метод Enum,name()
который возвращает значение объекта enum.источник
listHolidays.add(LocalDate.of(year, 1, 1));
в ответ. Если вы хотите улучшить ответ, вы должны добавить свой собственный. Надеюсь, что помогаетНиже приведены две строки фрагмента, использующие Java 1.8 Time API для вашего требования.
источник