Получить текущую дату kotlin android

Работа с датами в Котлине

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.

Источник

Программа Kotlin для получения текущей даты / времени

В этой программе вы научитесь получать текущую дату и время в различных форматах на Kotlin.

Пример 1: Получить текущую дату и время в формате по умолчанию

Когда вы запустите программу, вывод будет:

В приведенной выше программе текущая дата и время хранятся в переменной current using LocalDateTime.now() method.

Для формата по умолчанию он просто преобразуется из LocalDateTime объекта в строку с помощью toString() метода.

Пример 2: Получить текущую дату и время с шаблоном

Когда вы запустите программу, вывод будет:

В приведенной выше программе мы определили шаблон формата Year-Month-Day Hours:Minutes:Seconds.Milliseconds с помощью DateTimeFormatter объекта.

Затем мы использовали LocalDateTime «s format() метод , чтобы использовать данный форматировщик. Это дает нам форматированный строковый вывод.

Пример 3: Получить текущую дату и время с помощью предопределенных констант

Когда вы запустите программу, вывод будет:

В приведенной выше программе мы использовали предопределенную константу формата, BASIC_ISO_DATE чтобы получить в качестве вывода текущую дату ISO.

Пример 4: Получить текущую дату и время в локализованном стиле

Когда вы запустите программу, вывод будет:

В приведенной выше программе мы использовали стиль Localized, Medium чтобы получить текущую дату и время в заданном формате. Есть другие стили , а также: Full , Long и Short .

Если вам интересно, вот список всех шаблонов DateTimeFormatter.

Кроме того, вот эквивалентный код Java: Программа Java для получения текущей даты и времени

Читайте также:  Нет звука андроид авто навигатор

Источник

Lesson 11 — Date and Time in Kotlin — Creating and formatting

In the previous lesson, Properties in Kotlin, we introduced you to getter and setter properties in Kotlin. Today, we’re going to explore other classes which Kotlin provides through Java. You’ll learn how to work with date and time.

Date and time in Kotlin

Kotlin doesn’t have its own date and time implementation. Why should the Kotlin developers focus on something Oracle created in Java 8? As we emphasized in the Kotlin basic course, Kotlin and Java are «compatible», they use the same virtual machine and that’s why they can share their classes. Therefore, Kotlin uses Java classes for date and time.

Unfortunately, Java’s implementation of date and time has changed multiple times in the past. Many of the early attempts weren’t very successful, up to the point where third-party libraries were used instead. Although we’re going to use the implementation introduced in Java 8, let’s go over the legacy (old) classes since you’ll encounter them in other projects, sooner or later:

  • Date — The Date class from the java.util package was the first attempt of storing date and time in Java. It’s still there for the sake of backward compatibility, however, almost all of its methods are now marked as deprecated. We won’t deal with this class at all. If you ever encounter it and want to know exactly how it works, use the official documentation — https://docs.oracle.com/…il/Date.html
  • Calendar — The Calendar class is the first replacement of the initial Date class, which brought things like localization or better manipulation with the inner values. That way, you were able to add time interval and so on. Don’t use it for new projects. However, since Java 8 is still relatively new, you’ll see this class for sure.
  • LocalDate , LocalTime , and LocalDateTime — Since Java 8, the LocalDateTime class and its variants are used exclusively for date and/or time. When we compare it to the Calendar class, it’s immutable. Which means, simply put, that we can use it when working with threads (more on this in later Kotlin courses). It also provides a fluent interface which is sometimes referred to as method chaining. Another good thing about it is that it doesn’t mix getting and setting different value parts into a single method. Instead, it provides a variety of separated methods to do so. It surpasses the original Calendar class in both quality and in the number of features.
  • Joda-Time — The unsuccessful attempts of implementing date and time in Java resulted in a need for a high-quality replacement for built-in classes. The Joda-Time library became quite popular at this point in time. The new Java 8 date API was inspired, in many ways, by this library and even uses the same concepts. One might even say that Joda-Time might be more powerful and of higher quality. However, I suggest that you keep using the standard LocalDateTime class and avoid unnecessary dependencies on third-party components.

Dealing with a large amount of classes is, whether you like it or not, part of a Java/Kotlin programmer’s daily routine. We’ll dedicate three articles to date and time. With all of that being said, let’s get right to it!

LocalDateTime, LocalDate and LocalTime

As we already know, we’ll use the LocalDateTime , LocalDate , and LocalTime classes based on whether we need to store both date and time (e.g. a flight departure), date only (e.g. a birth date), or time only (e.g.: 10:00, nanosecond accuracy).

Creating instances

We’ll start by creating instances of those classes. Create a new project and name it DateAndTime .

Creating an instance from given values

When we create a new instance of one of the classes, we call the factory of() method on the class and pass the appropriate parameters to it. The method has multiple overloads. You can specify seconds, or a month by a number or by an enumerated type (which is probably more readable, more about them later on in the course) as well as several others.

Don’t forget to import the classes:

Creating the current date and time instance

As you already know, we’ll have to retrieve the current date and time in lots of future applications. To do so, we’ll call the now() factory method right on the corresponding class:

Formatting

The output isn’t user-friendly at all, so let’s format it! As you may have guessed, we’re going to use the format() method to do so. However, this time, we’ll call it on an instance. The formatting will then be provided by the DateTimeFormatter class. We’ll be using the following static methods on it:

  • ofLocalizedDaВ­teTime() — Formats to a local date and time format. It takes two parameters — the date style and the time style. We can choose anything from the full format to the short format, this applies for all of the methods except for ofPattern().
  • ofLocalizedDate() — Formats to the local date format
  • ofLocalizedTime() — Formats to the local time format
  • ofPattern() — Unlike the above methods which formatted using the user’s regional settings, this method allow us to specify a custom format as a string containing format symbols. For example, the day, month, year, hours, minutes, and seconds (all numbers) would be passed as the following string «M/d/y H:m:ss». The description of all of the symbols is quite exhausting and can be found in the official Java documentation — https://docs.oracle.com/…rmatter.html
Читайте также:  Дизайн ui android что это

Here’s an example of each method:

Don’t forget to add imports:

The date and time will be localized depending on your operating system language.

Notice how we set the style (using the FormatStyle enum), which indicates whether we want a full or a brief output. We can use the following values:

  • FULL — Returns the date as «Friday, December 6, 2016». This one is not suitable for time and throws an exception if used this way.
  • LONG — Returns the date as «December 6, 2016». Isn’t suitable for time and throws an exception if used this way.
  • MEDIUM — Returns the date as «Dec 6, 2016», the time as «3:15:10».
  • SHORT — Returns the date as «12/6/2016», the time as «3:15».

There are also some predefined ISO formats available as constants on the DateTimeFormatter class. However, they’re not very user friendly, so we won’t use them.

Since date and time in Kotlin is a rather long topic, we’ll continue discussing it in the next lesson, Date and Time in Kotlin — Modifying and intervals, as well. We’ll convert between LocalDate , LocalTime , and LocalDateTime as well as modify the inner value and introduce time intervals.

Источник

Преобразование любой строки в дату часового пояса и отображение в kotlin android

Я получаю дату ( String ) в разных форматах из службы API. Дата String может быть в формате «2010-10-15T09:27:37Z» или «July 30, 2020» или в любом другом формате.

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

Я пробовал следующее:

Но может ли кто-нибудь сказать, как преобразовать String , который поступает из API, в формат часового пояса устройства в Android kotlin?

Пожалуйста, помогите мне с этим вопросом.

2 ответа

Дата String может иметь формат «2010-10-15T09:27:37Z» или «July 30, 2020» или любой другой формат.

. потребует много работы. Вам придется позаботиться о множестве возможных форматов. Входные данные, которые вы получаете, могут быть датой плюс время плюс зона / отключение (первый пример) или только датой (второй пример, здесь даже регион имеет значение из-за названий месяцев).

Для вашего первого примера ( «2010-10-15T09:27:37Z» ) LocalDateTime не лучший выбор, потому что он игнорирует часовой пояс или смещение ( Z в данном случае для UTC или смещение <> часов).

Для вашего второго примера ( «July 30, 2020» ), LocalDate было бы достаточно для анализа String , но вам нужно будет добавить время и зону / смещение, чтобы показать и преобразовать его. должным образом.

Используйте ZonedDateTime или OffsetDateTime вместе с ZoneId.systemDefault() , чтобы получить зону устройства.

Вот пример ZonedDateTime , включающий возможность преобразования текущего часового пояса в другой (здесь «Europe/Amsterdam» , но тогда вам, очевидно, придется использовать ZoneId.systemDefault() ):

Вывод этого примера кода:

Во-первых, вам нужно проверить, соответствует ли формат строки даты, возвращаемой из API, ожидаемому. Поскольку у вас есть несколько вариантов формата, вам нужно будет безопасно это проверить. Вы можете сделать это так:

Вы можете установить желаемый формат и проверить несколько форматов с помощью try / catch. Это идеально, только если вы знаете все возможные форматы, в которых api может возвращать дату.

В ответе @deHaar вы можете увидеть, как правильно отформатировать часовые пояса, но это самый безопасный способ проверить, что дата находится в ожидаемом формате

Источник

Классы 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 года.
Читайте также:  Album player для андроид

Если вы посмотрите документацию, то увидите, что существует множество методов для получения или установки отдельных компонентов времени и даты, например, 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. В первом случае будет отображаться ноль перед цифрой.

Примеры работы с датами и временем можно найти в статье на эту тему.

Источник

Оцените статью