Классы 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. В первом случае будет отображаться ноль перед цифрой.
Примеры работы с датами и временем можно найти в статье на эту тему.
Источник
TextClock
TextClock — компонент, который появился в Android 4.2. Находился в разделе Date & Time в старых версиях студии, сейчас отсутствует на панели инструментов. Наследуется от TextView.
Компонент TextClock предназначен для вывода текущей даты и времени в текстовой строке. Причём, элемент сам отслеживает системное время и автоматически меняет показания. Служит отличной заменой для громоздких элементов типа AnalogClock или DigitalClock.
Интерес представляют два атрибута android:format12Hour и android:format24Hour, которые задают шаблон для вывода даты/времени. Так как пользователь может в настройках установить 12- или 24-часовой формат, то можно задать шаблоны для разных форматов. При переключении из одного формата в другой вид TextClock автоматически выведет дату/время в заданном шаблоне.
Разместим на экране два элемента TextClock для экспериментов.
Запустим проект и посмотрим на время. Затем в настройках поменяем формат вывода времени и вернёмся в своё приложение. Убедимся, что теперь выводятся данные при помощи другого шаблона. Текущий формат системного времени можно увидеть в верхней правой части экрана.
В первом случае у первого элемента при 24-формате выводится дата и время по шаблону EEEE, MMMM dd, yyyy h:mmaa. Так как в эмуляторе была выбрана американская локаль, то текст выводится на английском. При переключении в 12-часовой формат наш элемент уже использует шаблон hh:mm. Со вторым элементом вы разберётесь самостоятельно.
Источник
Как я могу получить текущую дату в Android?
Я написал следующий код
Но задает мне параметр, мне нужна текущая дата в строковом формате,
чтобы я мог установить более TextView ,
немного объясните, если вы считаете, что что-то необходимо, я новичок в разработке Android.
Вы можете использовать класс SimpleDateFormat для форматирования даты в желаемом формате.
Просто проверьте эту ссылку, где вы получите идею для вашего примера.
Обновить:
Подробный пример здесь, я бы посоветовал вам пройти этот пример и понять концепцию класса SimpleDateFormat.
Окончательное решение:
Его простой однострочный код для получения текущей даты в этом формате гггг-мм-дд, вы можете использовать свой формат, который вы хотите:
Это не связано с андроидом, поскольку он основан на Java, поэтому вы можете использовать
Сначала вам нужен экземпляр
Работает как шарм и конвертирует в String в качестве бонуса;)
//импортируем класс Date как java.util
В приведенном ниже коде отображаются время и дата
Простая настройка решения Paresh:
Вы можете использовать следующий код, чтобы получить дату в нужном вам формате.
Я даю современный ответ.
java.time и ThreeTenABP
Чтобы получить текущую дату:
Это дает вам объект LocalDate , который вы должны использовать для хранения даты в вашей программе. LocalDate – это дата без времени суток.
Только когда вам нужно отобразить дату для пользователя, отформатируйте ее в строку, подходящую для локали пользователя:
Когда я сегодня запускал этот фрагмент в английской локали США, вывод был:
Если вы хотите, чтобы он был короче, укажите FormatStyle.MEDIUM или даже FormatStyle.SHORT . DateTimeFormatter.ofLocalizedDate использует локаль форматирования по умолчанию, поэтому дело в том, что она выдаст выходные данные, подходящие для этой локали, отличающиеся для разных локалей.
Если у вашего пользователя есть особые требования к формату вывода, используйте строку шаблона формата:
Источник
Как узнать текущее время и дату в Android
Как узнать текущее время и дату в приложении для Android?
Вы можете использовать:
В календаре достаточно констант для всего, что вам нужно.
Вы можете ( но больше не должны — смотрите ниже!) Использовать android.text.format.Time :
Из ссылки, указанной выше:
Класс Time — более быстрая замена для классов java.util.Calendar и java.util.GregorianCalendar. Экземпляр класса Time представляет момент времени, указанный с точностью до секунды.
ПРИМЕЧАНИЕ 1. Прошло несколько лет с тех пор, как я написал этот ответ, и речь идет о старом, специфичном для Android, и теперь устаревшем классе. Google теперь говорит, что «[t] его класс имеет ряд проблем, и рекомендуется использовать GregorianCalendar вместо этого».
ПРИМЕЧАНИЕ 2. Несмотря на то, что у Time класса есть toMillis(ignoreDaylightSavings) метод, это просто удобство для перехода к методам, которые ожидают время в миллисекундах. Значение времени с точностью до одной секунды ; доля в миллисекундах всегда 000 . Если в цикле вы делаете
Результирующая последовательность будет повторять одно и то же значение, например 1410543204000 , до тех пор, пока 1410543205000 не начнется следующая секунда, после чего начнется повторение.
Если вы хотите получить дату и время по определенному шаблону, вы можете использовать следующее:
Дата :
Время:
Для тех, кто предпочитает индивидуальный формат, вы можете использовать:
Принимая во внимание, что вы можете иметь шаблоны DateFormat, такие как:
На самом деле, безопаснее установить текущий часовой пояс, установленный на устройстве, с помощью Time.getCurrentTimezone() , иначе вы получите текущее время в UTC.
Затем вы можете получить все нужные поля даты, например:
ОБНОВИТЬ
Как отмечают многие, Google говорит, что у этого класса есть ряд проблем, и его больше нельзя использовать:
Этот класс имеет ряд проблем, поэтому рекомендуется использовать GregorianCalendar.
По историческим причинам при выполнении временных вычислений вся арифметика в настоящее время выполняется с использованием 32-разрядных целых чисел. Это ограничивает достоверный диапазон времени, представляемый с 1902 до 2037 года. Подробности смотрите в статье в Википедии о проблеме 2038 года. Не полагайтесь на это поведение; это может измениться в будущем. Вызов switchTimezone (String) в дату, которая не может существовать, например, в настенное время, которое было пропущено из-за перехода на летнее время, приведет к дате в 1969 году (т.е. -1 или 1 секунда до 1 января 1970 года по Гринвичу). Большая часть форматирования / синтаксического анализа предполагает использование текста ASCII и поэтому не подходит для использования со сценариями, не относящимися к ASCII.
Источник
Android studio узнать дату
Полный текст статьи и исходники программы доступны только зарегистрированным участникам сайта.
Прочитайте внимательно условия! В начале каждой статьи указывается, к какому курсу относится данная статья. Например, если статья из 4 курса, значит нужно заплатить за все курсы по четвёртый включительно.
Стоимость регистрации — символические 350 рублей. После регистрации у вас будет доступ ко второму курсу.
Для регистрации сначала необходимо пополнить ЮMoney(бывший Яндекс.Кошелек) 410011383280263 на указанную сумму (или Webmoney-кошелек P894989790291 (старый R390884954122) или QIWI (перевод по никнейму), а затем прислать письмо на адрес alexander.klimoff@gmail.com с указанием, на какой кошелёк вы делали оплату и реквизиты, по которым можно вас определить (не прикрепляйте к письму картинки или файлы). Учитывайте комиссию при переводах.
Не присылайте в письме мои номера кошельков — поверьте, я их знаю и без вас.
В ответном письме вы получите учётные данные для чтения статей из закрытой зоны за второй курс.
Доступ к третьему курсу обучения доступен только после оплаты второго курса и составляет 350 руб.
Доступ к четвёртому курсу обучения доступен после оплаты третьего курса и составляет 350 руб. и т.д.
При оплате сразу всех курсов одновременно (2-9) цена составит 2800 руб.
Доступ даётся как минимум на один год. Для тех, кто оплатил третий и другие курсы, сроки доступа увеличиваются.
Также возможен приём на PayPal (только для зарубежных пользователей). Обратите внимание, что в этом случае стоимость одного курса составляет 7$.
Источник