- Классы Date, Calendar, DateFormat
- Calendar
- GregorianCalendar
- TimeZone
- SimpleTimeZone
- Класс DateFormat
- Класс SimpleDateFormat
- Android studio calendar день недели
- Android Calendar получает текущий день недели в виде строки
- Андроид: Как получить текущий день недели (понедельник и т. д.) На языке пользователя?
- 8 ответов:
- tl; dr
- java.время
- Joda Времени
- о java.время
- CalendarView
- Получить выбранную дату
- Программно установить дату в CalendarView
- Установить минимальную и максимальную даты
- Дополнительное чтение
Классы Date, Calendar, DateFormat
Класс Date предназначен для работы с текущими датой и временем и позволяет отталкиваться от них для решения своих задач. При выходе новых версий Java часть методов класса была перемещена в классы Calendar и DateFormat.
При импорте выбирайте java.util.Date, а не java.sql.Date.
У класса есть два конструктора:
Первый конструктор без параметров инициализирует объект текущей датой и временем. Во втором конструкторе вы можете указать количество миллисекунд, прошедших с полуночи 1 января 1970 года.
- boolean after(Date date) — если объект класса Date содержит более позднюю дату, чем указано в параметре, то возвращается true
- boolean before(Date date) — если объект класса Date содержит более раннюю дату, чем указано в параметре, то возвращается true
- int compareTo(Date date) — сравнивает даты. Возвращает 0, если совпадают, отрицательное значение — если вызывающая дата более ранняя, положительное значение — если вызывающая дата более поздняя, чем в параметре
- boolean equals(Object object) — если даты совпадают, то возвращается true
- long getTime() — возвращает количество миллисекунд, прошедших с полуночи 1 января 1970 года
- void setTime(long milliseconds) — устанавливает время и дату в виде числа миллисекунд, прошедших с полночи 1 января 1970 года.
Если вы посмотрите документацию, то увидите, что существует множество методов для получения или установки отдельных компонентов времени и даты, например, getMinutes()/setMinutes() и др. Все они являются устаревшими и вместо них следует использовать класс Calendar.
Простой пример вывода даты на экран.
С помощью метода getTime() можно отобразить количество миллисекунд, прошедших с 1 января 1970 года. Обновим пример
Calendar
Абстрактный класс Calendar позволяет преобразовать время в миллисекундах в более удобном виде — год, месяц, день, часы, минуты, секунды. Существуют также подклассы, например, GregorianCalendar.
Переменная типа boolean под именем areFieldsSet указывает, были установлены компоненты времени. Переменная fields — это массив целочисленных значений, содержащий компоненты времени. Переменная isSet — массив типа boolean, указывающий, был ли установлен специфический компонент времени. Переменная time (тип long) содержит текущее время объекта. Переменная isTimeSet (тип boolean) указывает, что было установлено текущее время.
У класса много методов. Вкратце опишем часть из них:
- abstract void add(int field, int value) — добавляет value к компоненту времени или даты, указанному в параметре field (например, Calendar.HOUR). Чтобы отнять, используйте отрицательное значение.
- boolean after(Object calendar) — возвращает значение true, если вызывающий объект класса Calendar содержит более позднюю дату, чем calendar.
- boolean before(Object calendar) — возвращает значение true, если вызывающий объект класса Calendar содержит более раннюю дату, чем calendar.
- final void clear() — обнуляет все компоненты времени в вызывающем объекте.
- final void clear(int field) — обнуляет компонент, указанный в параметре field
- int get(int field) — возвращает значение одного компонента, например, Calendar.MINUTE
- synchronized static Locale[] getAvailableLocales() — возвращает массив объектов класса Locale, содержащий региональные данные
- synchronized static Calendar getInstance() — возвращает объект класса Calendar для региональных данных и часового пояса по умолчанию. Есть и другие перегруженные версии.
- final Date getTime() — возвращает объекта класса Date, содержащий время, эквивалентное вызывающему объекту
- TimeZone getTimeZone() — возвращает часовой пояс
- final boolean isSet(int field) — возвращает значение true, если указанный компонент времени указан.
- void set(int field, int value) — устанавливает компоненты даты или времени. Есть перегруженные версии
- final void setTime(Date date) — устанавливает различные компоненты даты и времени через объект класса Date
- void setTimeZone(TimeZone timezone) — устанавливает часовой пояс через объект класса TimeZone
Также в календаре определены много различных констант: AUGUST и другие месяцы, SATURDAY и другие дни недели, HOUR и т.д.
GregorianCalendar
Класс GregorianCalendar является подклассом Calendar, который представляет обычный Григорианский календарь. Метод getInstance() класса Calendar обычно возвращает объект класса GregorianCalendar, инициированный текущей датой и временем согласно региональным настройкам.
У класса есть два поля AD и BC — до нашей эры и наша эра.
Кроме стандартных методов, которые есть в классе Calendar, у GregorianCalendar есть метод isLeapYear() для проверки високосного года.
Если год високосный, то возвращается true.
Отсчёт месяцев идёт от нуля, поэтому декабрь будет одиннадцатым месяцем. Чтобы не путаться с такими случаями, проще использовать понятные константы:
А получать нужные отрезки времени можно через метод get(). Например, узнать, какой месяц содержится в созданной нами дате можно так:
Изменить состояние объекта можно через метод set(). Например, установим новую дату у нашего объекта.
Можно сдвинуть дату на определённый период с помощью метода add(). Отодвинем дату на два месяца.
Методы getTime() и setTime() работают с объектами Date и полезны для преобразования.
TimeZone
Класс TimeZone позволяет работать с часовыми поясами, смещёнными относительно Гринвича, также известного универсальное глобальное время (UTC). Класс также учитывает летнее время.
SimpleTimeZone
Класс SimpleTimeZone — подкласс класса TimeZone и позволяет работать с часовыми поясами в Григорианском календаре.
Класс DateFormat
Класс DateFormat является абстрактным классом, с помощью которого можно форматировать и анализировать показания даты и времени. метод getDateInstance() возвращает экземпляр класса DateFormat, который может форматировать информацию о дате.
Чаще всего используется метод format(), позволяющий вывести дату в нужном формате.
Класс SimpleDateFormat
Класс SimpleDateFormat является подклассом класса DateFormat и позволяет определять собственные шаблоны форматирования для отображения даты и времени.
Символы форматирования строки
- A — AM или PM
- d — день месяца (1-31)
- D — день в году (1-366)
- H — часы в формате AM/PM (1-12)
- K — часы в формате суток (1-24)
- M — минуты (0-59)
- S — секунды (0-59)
- W — неделя в году (1-53)
- y — год
- z — часовой пояс
Количество повторений символа определяет способ представления даты. Например, можно указать hh:mm:ss, а можно h:m:s. В первом случае будет отображаться ноль перед цифрой.
Примеры работы с датами и временем можно найти в статье на эту тему.
Источник
Android studio calendar день недели
Сегодня мы разберем такой простой и всем известный элемент пользовательского интерфейса Android платформы, как календарь. Чтобы интегрировать стандартный календарь в свое приложение, разработчики используют элемент под названием CalendarView, который появился аж с 3-й версии операционной системы. С помощью различных атрибутов, можно покрутить и настроить вид календаря под свой вкус, хотя настроек не так уж много. Например, присутствуют такие атрибуты:
— android:firstDayOfWeek — выставляем первый день недели;
— android:minDate — минимальная дата, которую будет показывать календарь, которая задается в формате mm/dd/yyyy (месяц, день, год);
— android:selectedWeekBackgroundColor — фоновый цвет для выбранной недели;
— android:showWeekNumber — здесь мы можем выставить, показывать номер недели или нет;
— android:weekNumberColor — цвет для номер недели;
— android:weekSeparatorLineColor — цвет линии, разделяющей недели и тп.
Мы не будем слишком кастомизировать свой календарь, а точнее вообще не будем, мы просто сделаем приложение, отображающее календарь и настроим ему слушателя изменений выбранной даты. Для каждого нажатия по любому дню в календаре мы, используя метод onSelectedDayChange (), будем показывать Toast сообщение с информацией о выбранной дате.
Создаем новый проект, выбираем Blank Activityи минимальную версию Android 4.0+.
В файле activity_main.xml создаем календарь:
Теперь переходим к файлу MainActivity.java. Здесь мы объявляем CalendarView, ссылаемся на наш календарь в файле интерфейса, задаем ему слушателя смены даты setOnDateChangeListener, а также используя метод onSelectedDayChange, при смене даты выводим Toast сообщение с выбранной датой:
Вот и все, на этом знакомство с системным Android календаря заканчивается, запускаем приложение и смотрим на результат:
Работает нормально, правда почему то в Google считают, что январь это 0-й месяц, поэтому май показывает как 4. Чтобы исправить, можно в настройках Toast сообщения, добавить к значению месяца единицу.
Источник
Android Calendar получает текущий день недели в виде строки
Я попытался получить строку с именем фактического рабочего дня следующим образом:
Но weekDay всегда остается weekDay нулю, и я действительно понятия не имею, почему, поскольку отладчик говорит, что dayOfWeek равен 5, поэтому я должен быть равен c.get(Calendar.THURSDAY)
Я сделал это, выполнив следующие действия:
- Использование формата дня для «EEEE» вернет полное имя дня недели, т.е. вторник
- Использование формата дня для «E» вернет сокращенное имя, то есть Tue
- Еще одним преимуществом для возвращения этого формата в Android является то, что он будет переводить будний день на основе локали.
Вы захотите просмотреть SimpleDateFormat, чтобы узнать больше. Я думаю, что это самый чистый подход в том, что вам не нужен оператор switch или if, если только вам нужно получить строковое значение.
Так просто, как это
Вы должны сравнить dayOfWeek напрямую с Calendar.MONDAY и т. Д. См. Код ниже
Кроме того, я положил скобки вокруг, если еще. Не полагайтесь на отступы для потока кода, явно помещайте скобки, даже если ваш if-else имеет только один оператор.
Просто выполните следующие действия:
Не нужно было использовать c.get
Вы можете увидеть свою ошибку, если попытаетесь напечатать значения c.get с помощью этого кода
Например, я получаю:
И результат будет неправильным, в моем случае я получаю Sunday как weekDay если я использую ваш код.
Источник
Андроид: Как получить текущий день недели (понедельник и т. д.) На языке пользователя?
Я хочу знать, что текущий день недели (понедельник, вторник. ) на локальном языке пользователя. Например, «Ланди», «Марди» и др. если пользователь французский.
Я прочитал этот пост, но он возвращает только int, а не строку с днем на языке пользователя:каков самый простой способ получить текущий день недели в Android?
в более общем плане, как вы получаете все дни недели и все месяцы года, написанные в язык пользователя ?
Я думаю, что это возможно, так как, например, повестка дня Google дает дни и месяцы, написанные на местном языке пользователя.
8 ответов:
использовать SimpleDateFormat для форматирования даты и времени в удобочитаемую строку, в зависимости от локали пользователя.
небольшой пример, чтобы получить текущий день недели (например, «понедельник»):
чтобы сделать вещи короче, вы можете использовать это:
который возвращает день недели в виде строки.
ее то, что я использовал, чтобы получить названия дней ( 0-6 означает monday — sunday ):
Я знаю уже ответил, но кто ищет ‘Пт’ такой
и кто хочет полную строку даты они могут использовать 4E на пятница
результат.
удачи в кодировании.
tl; dr
java.время
java.классы времени, встроенные в Java 8 и более поздние и back-ported to Java 6 & 7 и для Android включить пригодится DayOfWeek перечисление.
дни пронумерованы согласно стандартному определению ИСО 8601, 1-7 на понедельник-воскресенье.
это перечисление включает в себя getDisplayName метод для генерации строки локализованного переведенного имени объекта день.
The Locale объект определяет человеческий язык, который будет использоваться в переводе, и определяет культурные нормы для решения таких вопросов, как заглавные буквы и знаки препинания.
чтобы получить сегодняшнюю дату, используйте LocalDate класса. Обратите внимание, что часовой пояс имеет решающее значение, так как для любого данного момента дата меняется по всему миру.
имейте в виду, что язык не имеет ничего общего с часовым поясом.два отдельных различных ортогональных вопроса. Вы можете хотите французскую презентацию даты-времени зонирования в Индии ( Asia/Kolkata ).
Joda Времени
The Joda Времени библиотеки Locale — управляемая локализация значений даты-времени.
о java.время
The java.время фреймворк встроен в Java 8 и более поздние версии. Эти классы вытесняют беспокойных старых наследие классы даты и времени, такие как java.util.Date , Calendar ,& SimpleDateFormat .
чтобы узнать больше, смотрите Oracle Tutorial. Поиск переполнения стека для многих примеров и объяснений. Спецификация является JSR 310.
где получить java.время занятий?
извините за поздний ответ.Но это будет работать должным образом.
Источник
CalendarView
Компонент CalendarView находится в разделе Widgets и выводит на экран календарь.
Описание всех атрибутов можно взять из документации.
В данном случае я выбрал цвет для выбранной недели (красный), цвет для номера недели (синий) и цвет для разделителей (зелёный). Спустя несколько лет обнаружил, что данные атрибуты теперь считаются устаревшими и игнорируются.
Выбранную дату можно отслеживать через метод setOnDateChangeListener():
Получить выбранную дату
В предыдущем примере мы получали выбранную дату через слушатель. Получить выбранную дату по щелчку кнопки по идее можно через метод getDate(). По крайней мере в документации говорится, что возвращается выбранная дата, но в реальности возвращается сегодняшняя дата. Оставил пример для демонстрации взаимодействия между CalendarView и объектом Calendar.
Добавим на экран активности кнопки и напишем код для её щелчка.
Программно установить дату в CalendarView
Сделаем обратную задачу — мы получили дату в виде объекта Calendar и хотим установить её в CalendarView. Не забывайте, что отсчёт месяцев идёт с 0.
Вместо вызова свойства calendarView.date можно вызвать метод setDate(), который имеет перегруженную версию с тремя параметрами.
Установить минимальную и максимальную даты
Компонент позволяет установить минимальную и максимальную даты через атрибуты minDate и maxDate, все остальные даты вне заданного промежутка будут недоступны.
Также можно установить эти даты программно через calendarView.minDate и calendarView.maxDate.
Дополнительное чтение
prolificinteractive/material-calendarview — по уверению автора, лучший вариант календаря, чем системный.
vikramkakkar/SublimePicker позволяет выбрать дату, время и повторяющие интервалы.
Источник