- Работа с датами в Котлине
- 1. Введение
- 2. Создание даты
- 3. Форматирование даты
- 4. Извлечение компонентов даты
- 5. Работа с периодом
- 6. Заключение
- Классы Date, Calendar, DateFormat
- Calendar
- GregorianCalendar
- TimeZone
- SimpleTimeZone
- Класс DateFormat
- Класс SimpleDateFormat
- Диалоговые окна
- DatePickerDialog и TimePickerDialog
- Android CalendarView Tutorial in Kotlin with Examples
- Android CalendarView Example
- Calendar View Methods
- setDate
- getDate
- firstDayOfWeek
- maxDate
- Calendar Range
Работа с датами в Котлине
1. Введение
В этом кратком руководстве мы узнаем о работе с датами в Kotlin.
Мы будем смотреть в дата — связанные операции , такие как создание, форматирование и управления датами.
2. Создание даты
Самый быстрый способ создания Date объект использует LocalDate «S синтаксического анализа () метод:
Метод parse () по умолчанию использует стандартный формат даты гггг-ММ-дд .
Мы также можем передать наш собственный формат для анализа строки даты:
И, если нам нужно больше контроля мы можем явно указать год , день и месяц , используя LocalDate «S из () методы :
3. Форматирование даты
Затем давайте посмотрим, как мы можем отформатировать наши объекты даты обратно в строки .
Стандартный способ форматирования даты с использованием формата по умолчанию в Kotlin — это вызов метода toString () .
Давай создадим дату
и посмотрите на вывод по умолчанию при использовании toString :
Это выглядит удобочитаемым, поскольку выходной формат — гггг-ММ-дд , но, опять же, нам может потребоваться отформатировать дату в пользовательских форматах в зависимости от наших сценариев использования.
Для форматирования нашей даты в различные форматы , которые мы можем использовать LocalDate «s формат () метод и предложения к нему нашему пользовательскому формату , используя DateTimeFormatter :
Это выводит красиво отформатированную дату:
4. Извлечение компонентов даты
LocalDate предоставляет множество методов, которые мы можем использовать для извлечения определенных компонентов из Date.
Некоторые из них довольно тривиальны, например, извлечение года, месяца или дня из даты :
Мы также можем извлечь другую информацию, например e ra , d ayOfTheWeek или d ayOfTheMonth :
5. Работа с периодом
Наконец, давайте рассмотрим работу с Periods в Kotlin.
Точки представляют собой расстояние на временной шкале. Мы можем создать Period, используя метод фабрики класса Period :
Это создает период в 1 год, 2 месяца и 3 дня.
Чтобы добавить Период в существующую дату, мы используем LocalDate «s плюс () метод:
Это добавит 1 год, 2 месяца и 3 дня к заданной дате и произведет измененную дату:
Точно так же мы можем вычесть период из заданной даты:
И, как и ожидалось, измененная дата будет:
Кроме того, мы можем использовать периоды для обозначения расстояния между двумя датами.
Предположим, у нас есть две даты с разницей ровно в 6 месяцев:
Теперь мы можем представить расстояние между этими двумя датами, используя метод Period between :
Период переменной будет производить следующее :
P означает период, а 6M означает 6 месяцев.
6. Заключение
В этой статье мы узнали основы работы с датами в Kotlin.
Мы рассмотрели, как создавать экземпляры даты с помощью различных методов и как форматировать объекты даты обратно в читаемый текст.
Кроме того, мы рассмотрели извлечение компонентов из объектов Date и, наконец, как работать с Periods в Kotlin.
Код, используемый в этом руководстве, доступен на GitHub.
Источник
Классы 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. В первом случае будет отображаться ноль перед цифрой.
Примеры работы с датами и временем можно найти в статье на эту тему.
Источник
Диалоговые окна
DatePickerDialog и TimePickerDialog
По умолчанию в Android уже определены два диалоговых окна — DatePickerDialog и TimePickerDialog , которые позволяют выбрать дату и время.
Кроме установки даты DatePickerDialog позволяет обработать выбор даты с помощью слушателей OnDateChangedListener и OnDateSetListener . Что позволяет использовать выбранную дату далее в приложении.
Подобным образом TimePickerDialog позволяет обработать выбор времени с помощью слушателей OnTimeChangedListener и OnTimeSetListener
Пи работе с данными компонентами надо учитывать, что отсчет месяцев в DatePickerDialog начинается с нуля, то есть январь будет иметь номер 0, а декабрь — 11. И аналогично в TimePickerDialog отсчет секунд и минут будет идти с 0 до 59, а часов — с 0 до 23.
Используем DatePickerDialog и TimePickerDialog в приложении. Определим следующую разметку интерфейса в activity_main.xml :
Здесь определены две кнопки для выбора даты и времени и текстовое поле, отображающее выбранные дату и время. И изменим код MainActivity :
Ключевым классом здесь является java.util.Calendar , который хранится в стандартной библиоетке классов Java. В методе setInitialDateTime() мы получаем из экземпляра этого класса количество миллисекунд dateAndTime.getTimeInMillis() и с помощью форматирования выводим на текстовое поле.
Метод setDate() , вызываемый по нажатию на кнопку, отображает окно для выбора даты. При создании окна его объекту передается обработчик выбора даты DatePickerDialog.OnDateSetListener , который изменяет дату на текстовом поле.
Аналогично метод setTime() отображает окно для выбора времени. Объект окна использует обработчик выбора времени TimePickerDialog.OnTimeSetListener , который изменяет время на текстовом поле.
И поле запуска, нажав на кнопку изменения времени, мы сможем установить время:
Источник
Android CalendarView Tutorial in Kotlin with Examples
In this tutorial, we are creating an Android CalendarView in Kotlin with examples. Android CalendarView is a great UI widget element. With the help of the CalendarView widget, we can see the dates on a Calendar.
This widget is being used in hundreds of fitness, booking, time tracking and event apps. There are unlimited use cases where we can use the CalendarView widget.
In this tutorial, we are learning how to create a Kotlin Android CalendarView. We are using Android Studio to create this calendar app. Without any further ado let’s start with an example.
Android CalendarView Example
Start by adding CalendarView widget in the xml.
activity_main.xml
In the XML design tab, it will show date as Jan 1, 1970, but when you run the application it will show you the current day date.
MainActivity.kt
We are going to learn quite a few methods that can very helpful. This first and one of the most important functions in CalendarView is setOnDateChangeListener function. It’s android calendarview get selected date method. Every time user changes the date we can listen to that change.
In onSelectedDayChange interface we have
- p0: it is calendar instance.
- p1: it’s selected year.
- p2: it’s selected month.
- p3: and It’s selected day.
NOTE: Somehow in Android months numbering start from 0. That is the reason we are doing +1.
Run the app to see a Kotlin Android calendarview.
Calendar View Methods
There are quite a few Calendar methods and we are going to discuss some of them.
setDate
In Kotlin we can set a date in calendar very easily. Simply call the CalendarView date property and provide the date as a Long value. Here is an example.
getDate
We can get the date using date property but it will return the date in Long which is not understandable. To understand the date and to format it as we want, we can take help from the SimpleDateFormat class.
Android CalendarView date format example
firstDayOfWeek
By default, the first day of the week is Sunday (S). To change the first day of the week we have to update firstDayOfWeek property.
Let’s set Monday as the first day of the week.
By default, Sunday is the first day of the week
After setting Monday as the first day of the week
maxDate
To limit the calendar date we can use maxDate property. In this example, the current will be limited to 26th March 2018. There will be no 2019,2020 and so on.
Again the value is in Long .
Calendar Range
To set the custom range in Calendarview use the property android:maxDate В andВ android:minDate
Источник