- Как определить день недели, передав конкретную дату в Java?
- 1. Обзор
- 2. Проблема
- 3. Решение С java.util.Date
- 3.1. День недели как число
- 3.2. День недели в виде текста
- 4. Решение С java.time.LocalDate
- 4.1. День недели как число
- 4.2. День недели в виде текста
- В Java, как получить строки дней недели (Sun, Mon. Sat) с языковым стандартом системы по умолчанию (язык)
- 5 ответов
- tl; dr
- java.время
- DayOfWeek
- о java.время
- Как определить день недели, пройдя конкретную дату?
- ТЛ; др
- java.time
- Порядковый номер
- Joda времени
- LocalDate
- парсить
- экстракт
- свалка
- Бежать
- О java.time
- java.time
- 16. Java — Дата и время
- Содержание
- Конструкторы
- Методы класса Date
- Текущая дата и время в Java
- Сравнение дат
- Форматирование даты с помощью SimpleDateFormat
- Формат-коды SimpleDateFormat
- Форматирование даты с помощью printf
Как определить день недели, передав конкретную дату в Java?
Краткое и практическое руководство по определению дня недели на Java.
Автор: baeldung
Дата записи
1. Обзор
В этом коротком уроке мы увидим, как извлечь день недели в виде числа и текста из даты Java.
2. Проблема
Бизнес – логика часто нуждается в дне недели. Почему? Во-первых, рабочее время и уровень обслуживания различаются между рабочими и выходными днями. Поэтому получение дня в виде числа необходимо для многих систем. Но нам также может понадобиться день в качестве текста для отображения.
Итак, как мы извлекаем день недели из дат на Java?
3. Решение С java.util.Date
java.util.Date является классом Java date начиная с Java 1.0. Код, который начался с Java версии 7 или ниже, вероятно, использует этот класс.
3.1. День недели как число
Во-первых, мы извлекаем день в виде числа с помощью java.util.Календарь :
Результирующее число колеблется от 1 (воскресенье) до 7 (суббота) . Календарь определяет константы для этого: Календарь.ВОСКРЕСЕНЬЕ – Календарь.СУББОТА .
3.2. День недели в виде текста
Теперь мы извлекаем день в виде текста . Мы передаем в Locale , чтобы определить язык:
Это возвращает полный день на вашем языке , например “Понедельник” на английском или “Монтэг” на немецком.
4. Решение С java.time.LocalDate
Java 8 переработала обработку даты и времени и представила java.time.LocalDate для дат. Поэтому Java-проекты, которые работают только на Java версии 8 или выше, должны использовать этот класс!
4.1. День недели как число
Извлечение дня в виде числа тривиально сейчас:
Полученное число по – прежнему колеблется от 1 до 7. Но на этот раз Понедельник-1, а воскресенье-7 ! день недели имеет свой собственный перечисление — День недели . Как и ожидалось, значения enum равны MONDAY – SUNDAY .
4.2. День недели в виде текста
Теперь мы снова извлекаем день в виде текста. Мы также передаем в Locale :
Источник
В Java, как получить строки дней недели (Sun, Mon. Sat) с языковым стандартом системы по умолчанию (язык)
самый простой способ:
этот метод не использует язык. Поэтому, если язык системы не английский, этот метод не работает должным образом.
используя время Joda, мы можем сделать так:
однако этот метод использует сегодняшние вычисления даты и календаря, которые бесполезны для конечной цели. Кроме того, это немного сложно.
есть ли простой способ получить строки, такие как «Sun» , «Mon» , . «Sat» С локаль системы по умолчанию?
5 ответов
Если я вас правильно понял
это то, что вы ищете. здесь вы можете найти документацию,
или вы также можете использовать getShortWeekdays()
вы можете создать дату с желаемой датой и временем. И достигни того, чего хочешь.
tl; dr
java.время
на Joda Времени, теперь режим обслуживания, советует миграцию в java.время классы. Много Явы.время портированы на Android (см. ниже).
DayOfWeek
на DayOfWeek перечисление определяет семь объектов, по одному для каждого дня недели. Класс предлагает несколько удобных методов, включая getDisplayName для генерации строки с локализованным днем имя.
для локализации, указать:
- TextStyle чтобы определить, как долго или сокращенно должна быть строка.
- Locale определить (а) человеческий язык для перевода названия дня, названия месяца и тому подобного, и (Б) культурные нормы, решающие вопросы аббревиатуры, капитализации, пунктуации, разделителей и тому подобного.
вы можете использовать Текущий часовой пояс JVM по умолчанию, а не указать его. Но имейте в виду риск: зона по умолчанию может быть изменена в любой момент во время исполнения любым кодом в любом потоке любого приложения, работающего в JVM.
о java.время
на java.время framework встроен в Java 8 и более поздние версии. Эти классы вытесняют беспокойных старых наследие классы даты и времени, такие как java.util.Date , Calendar , & SimpleDateFormat .
чтобы узнать больше, см. В Oracle Учебник. И search Stack Overflow для многих примеров и объяснений. Спецификация JSR 310.
где получить java.время занятий?
- Java SE 8 и SE 9 и позже
- встроенный.
- часть стандартного API Java со встроенной реализацией.
- Java 9 добавляет некоторые незначительные функции и исправления.
- Java SE 6 и SE 7
- большая часть java.функциональность времени портированы с Java 6 и 7 в ThreeTen-Backport.
- Android
- на ThreeTenABP проект приспосабливается ThreeTen-Backport (упомянуто выше) для Android конкретно.
- посмотреть как использовать ThreeTenABP..
без 1.8, вы можете использовать DateFormatSymbols (который также работает с Android).
Returns: строки буднего дня. Используйте Календарь.Воскресенье, календарь.ПОНЕДЕЛЬНИК, так далее. индексировать массив результатов.
Источник
Как определить день недели, пройдя конкретную дату?
Для примера у меня есть дата: “23/2/2010” (23 февраля 2010 г.). Я хочу передать его функции, которая вернет день недели. Как я могу это сделать?
В этом примере функция должна возвращать String “Tue”.
Кроме того, если требуется только порядковый номер дня, как это можно извлечь?
Да. В зависимости от вашего конкретного случая:
Вы можете использовать java.util.Calendar :
если вам нужен вывод Tue , а не 3 (дни недели индексируются начиная с 1), вместо перехода через календарь просто переформатируйте строку: new SimpleDateFormat(«EE»).format(date) ( EE значение “день недели, короткая версия” )
если у вас есть ваш ввод как строка, а не Date , вы должны использовать SimpleDateFormat для его синтаксического анализа: new SimpleDateFormat(«dd/M/yyyy»).parse(dateString)
вы можете использовать joda-time DateTime и вызвать dateTime.dayOfWeek() и/или DateTimeFormat .
Используйте этот код для поиска имени дня с даты ввода. Простой и хорошо протестированный.
Результат: сб, 28 дек 2013
Конструктор по умолчанию принимает локаль “по умолчанию”, поэтому будьте осторожны, когда используете конкретный шаблон.
ТЛ; др
Посмотрите этот код в режиме реального времени на IdeOne.com (но Locale.US работает только Locale.US ).
java.time
Посмотрите мой пример кода выше, и посмотрите правильный Ответ для java.time от Przemek.
Порядковый номер
если нужен только порядковый номер дня, как его можно получить?
В качестве порядкового номера рассмотрите возможность передачи объекта перечисления DayOfWeek например DayOfWeek.TUESDAY . Помните, что DayOfWeek – это смарт-объект, а не просто строка или целое число. Использование этих объектов 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. И поиск для многих примеров и объяснений. Спецификация JSR 310.
Где взять классы java.time?
- Java SE 8, Java SE 9 и более поздние
- Встроенный.
- Часть стандартного Java API с комплексной реализацией.
- Java 9 добавляет некоторые незначительные функции и исправления.
- Java SE 6 и Java SE 7
- Большая часть функциональности java.time перенесена на Java 6 и 7 в ThreeTen-Backport.
- Android
- Проект ThreeTenABP адаптирует ThreeTen-Backport (упомянутый выше) специально для Android.
- Смотрите Как использовать ThreeTenABP….
Проект ThreeTen-Extra расширяет java.time дополнительными классами. Этот проект является полигоном для возможных будущих дополнений к java.time. Здесь вы можете найти некоторые полезные классы, такие как Interval , YearWeek , YearQuarter и другие.
java.time
Использование java.time framework, встроенного в Java 8 и более поздних версиях.
В перечислении DayOfWeek можно создать строку названия дней, автоматически локализованную на человеческом языке и культурных нормах Locale . Укажите TextStyle чтобы указать, хотите ли вы длинную форму или сокращенное имя.
Вы можете попробовать следующий код:
Еще один “забавный” способ – использовать Doomsday algorithm. Это более длинный метод, но он также быстрее, если вам не нужно создавать объект Calendar с указанной датой.
Можно использовать следующий фрагмент кода для ввода типа (день = “08”, месяц = “05”, год = “2015”, а выход будет “СРЕДА”)
Источник
16. Java — Дата и время
Java предоставляет класс Date, который доступен в пакете java.util, этот класс заключает в себе текущую дату и время.
Содержание
Конструкторы
Класс Date поддерживает два конструктора, которые показаны ниже.
№ | Конструктор и описание |
1 | Date() Этот конструктор инициализирует объект с текущей датой и временем. |
2 | Date(long millisec) Этот конструктор принимает аргумент равный числу миллисекунд, истекших с полуночи 1 января 1970 г. |
Методы класса Date
Ниже представлены методы класса Date.
№ | Методы с описанием |
1 | boolean after(Date date) Возвращает значение true, если вызывающий объект date содержит дату, которая раньше заданной даты, в противном случае он возвращает значение false. |
2 | boolean before(Date date) Возвращает значение true, если вызывающий объект date содержит дату, более раннюю, чем заданная дата, в противном случае он возвращает значение false. |
3 | Object clone() Дублирование вызывающего объекта date. |
4 | int compareTo(Date date) Сравнивает значение вызывающего объекта с этой датой. Возвращает 0, если значения равны. Возвращает отрицательное значение, если объект вызова является более ранним, чем дата. Возвращает положительное значение, если объект вызова позже даты. |
5 | int compareTo(Object obj) Работает точно так же compareTo(Date), если объект вызова имеет класс Date. В противном случае вызывает ClassCastException. |
6 | boolean equals(Object date) Возвращает значение true, если вызывающий объект date содержит то же время и дату, которая указана в date, в противном случае он возвращает значение false. |
7 | long getTime() Возвращает количество миллисекунд, истекших с 1 января 1970 года. |
8 | int hashCode() Возвращает хэш-код для вызывающего объекта. |
9 | void setTime(long time) Задает дату и время, соответствующие моменту времени, что представляет собой общее затраченное время в миллисекундах от полуночи 1 января 1970 года. |
10 | String toString() Преобразует вызывающий объект date в строку и возвращает результат. |
Текущая дата и время в Java
Получить текущую дату и время в Java достаточно не трудно. Вы можете использовать простой объект date вместе с методом toString(), чтобы вывести текущую дату и время следующим образом:
Получим следующий результат:
Сравнение дат
Существуют три способа в Java сравнить даты:
- Можно использовать функцию getTime(), чтобы получить количество миллисекунд, прошедших с момента полуночи 1 января 1970, для обоих объектов, а затем сравнить эти два значения.
- Вы можете использовать методы before(), after() и equals(). Поскольку 12 число месяца раньше 18 числа, например, new Date(99, 2, 12).before(new Date (99, 2, 18)) возвращает значение true.
- Можно использовать метод compareTo(), который определяется сопоставимым интерфейсом и реализуется по дате.
Форматирование даты с помощью SimpleDateFormat
SimpleDateFormat — это конкретный класс для парсинга и форматирования даты в Java. SimpleDateFormat позволяет начать с выбора любых пользовательских шаблонов для форматирования даты и времени. Например:
Получим следующий результат:
Формат-коды SimpleDateFormat
Для того, чтобы задать в Java формат даты и времени, используйте строковый шаблон (регулярные выражения) с датой и временем. В этой модели все буквы ASCII зарезервированы как шаблон письма, которые определяются следующим образом:
Символ | Описание | Пример |
G | Обозначение эры | н.э. |
y | Год из четырех цифр | 2016 |
M | Номер месяца года | 11 |
d | Число месяца | 13 |
h | Формат часа в A.M./P.M.(1 12) | 7 |
H | Формат часа(0 23) | 19 |
m | Минуты | 30 |
s | Секунды | 45 |
S | Миллисекунды | 511 |
E | День недели | Вс |
D | Номер дня в году | 318 |
F | Номер дня недели в месяце | 2 (второе воскресение в этом месяце) |
w | Номер неделя в году | 46 |
W | Номер недели в месяце | 2 |
a | Маркер A.M./P.M. | AM |
k | Формат часа(1 24) | 24 |
K | Формат часа в A.M./P.M.(0 11) | 0 |
z | Часовой пояс | FET (Дальневосточноевропейское время) |
‘ | Выделение для текста | Текст |
» | Одинарная кавычка | ‘ |
Форматирование даты с помощью printf
Формат даты и времени можно сделать без труда с помощью метода printf. Вы используете формат двух букв, начиная с t и заканчивая одним из символов в таблице, приведенных ниже. Например:
Получим следующий результат:
Было бы немного глупо, если Вы должны были бы поставить дату несколько раз для форматирования каждой части. По этой причине формат строки может указывать индекс аргумента для форматирования.
Индекс должен непосредственно следовать за % и завершаться $. Например:
Источник