- Классы Date, Calendar, DateFormat
- Calendar
- GregorianCalendar
- TimeZone
- SimpleTimeZone
- Класс DateFormat
- Класс SimpleDateFormat
- Получить текущее время и дату на Android
- ОТВЕТЫ
- Ответ 1
- Ответ 2
- Ответ 3
- Ответ 4
- Ответ 5
- Ответ 6
- Ответ 7
- Ответ 8
- Ответ 9
- Ответ 10
- ТЛ; др
- Подробнее
- java.time
- Instant
- часовой пояс
- Генерация строк
- ISO 8601
- Пользовательский формат
- Localizing
- О java.time
- Ответ 11
- Ответ 12
- Ответ 13
- Ответ 14
- Ответ 15
- Ответ 16
- Ответ 17
- Ответ 18
- Ответ 19
- Ответ 20
- Ответ 21
- Ответ 22
- Ответ 23
- Ответ 24
- Ответ 25
- Ответ 26
- Ответ 27
- Ответ 28
- Ответ 29
- Ответ 30
Классы 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
Как получить текущее время и дату в приложении для Android?
ОТВЕТЫ
Ответ 1
Вы можете использовать:
В календаре есть много констант для всего, что вам нужно.
Ответ 2
Вы можете (но больше не нужно — см. ниже!) использовать android.text.format.Time:
Из ссылки, приведенной выше:
Класс Time — это более быстрая замена для java.util.Calendar и java.util.GregorianCalendar. Экземпляр класса Time представляет собой момент времени, указанный со второй точностью.
ПРИМЕЧАНИЕ 1: Прошло несколько лет с тех пор, как я написал этот ответ, и речь идет о старом, специфичном для Android и теперь устаревшем классе. Google сейчас говорит, что «[t] у его класса есть ряд проблем, и рекомендуется вместо GregorianCalendar».
ПРИМЕЧАНИЕ 2: Даже если класс Time имеет метод toMillis(ignoreDaylightSavings) , это просто удобство перехода к методам, которые ожидают время в миллисекундах. Значение времени только с точностью до одной секунды; часть миллисекунд всегда 000 . Если в цикле вы выполняете
Результирующая последовательность повторит то же значение, например 1410543204000 , до следующей следующей секунды, после чего начнется повторение 1410543205000 .
Ответ 3
Если вы хотите получить дату и время по определенному шаблону, вы можете использовать следующее:
Дата:
Время:
Ответ 4
Для тех, кто предпочитает настраиваемый формат, вы можете использовать:
В то время как вы можете иметь шаблоны DateFormat, такие как:
Ответ 5
На самом деле безопаснее установить текущий часовой пояс на устройстве с помощью Time.getCurrentTimezone() , иначе вы получите текущее время в формате UTC.
Затем вы можете получить все поля даты, которые вы хотите, например:
Подробнее см. android.text.format.Time для всех деталей.
UPDATE
Как указывают многие люди, Google говорит, что у этого класса есть ряд проблем и больше не предполагается использовать:
В этом классе есть ряд проблем, и рекомендуется, чтобы Вместо этого используется GregorianCalendar.
По историческим причинам при выполнении расчетов времени все арифметика в настоящее время выполняется с использованием 32-битных целых чисел. Эти ограничения надежный временной диапазон, представленный с 1902 года по 2037 год. статья в Википедии о проблеме 2038 года для деталей. Не полагайтесь на это поведение; он может измениться в будущем. призвание switchTimezone (String) на дату, которая не может существовать, например, стена время, которое было пропущено из-за перехода на летнее время, приведет к дате в 1969 году (то есть -1, или 1 секунда до 1 января 1970 года по UTC). Большая часть форматирование/синтаксический анализ предполагает текст ASCII и поэтому не подходит для использования с не-ASCII-скриптами.
Ответ 6
Для текущей даты и времени используйте:
Ответ 7
Попробуйте таким образом. Все форматы приведены ниже, чтобы получить формат даты и времени.
Ответ 8
В настоящее время вы можете использовать System.currentTimeMillis() , который является стандартным для Java. Затем вы можете использовать его для создания даты
И как упоминалось другими, чтобы создать время
Ответ 9
Вы можете использовать код:
Вы также можете получить дополнительные опции форматирования для SimpleDateFormat из здесь.
Ответ 10
ТЛ; др
Подробнее
Другие ответы, хотя и правильные, устарели. Старые классы даты и времени оказались плохо продуманными, запутанными и хлопотными.
java.time
Эти старые классы были заменены структурой java.time.
- Java 8 и более поздние версии: интегрированная среда java.time.
- Java 7 & 6: Используйте бэкпорт java.time.
- Android: используйте эту упакованную версию этого бэкпорта.
Эти новые классы вдохновлены очень успешным проектом Joda-Time, определенным JSR 310 и расширенным проектом ThreeTen-Extra.
Instant
Instant — это момент времени на UTC с разрешением до наносекунд.
часовой пояс
Примените часовой пояс ( ZoneId ), чтобы получить ZonedDateTime . Если вы опустите часовой пояс, то текущий часовой пояс по умолчанию для JVM будет применен неявно. Лучше явно указать желаемый/ожидаемый часовой пояс.
Используйте правильные имена часовых поясов в формате continent/region , например America/Montreal , Europe/Brussels или Asia/Kolkata , Никогда не используйте 3-4-буквенные сокращения, такие как EST или IST , поскольку они не являются ни стандартизированными, ни уникальными.
Генерация строк
Вы можете легко сгенерировать String как текстовое представление значения даты и времени. Вы можете использовать стандартный формат, собственный формат или автоматически локализованный формат.
ISO 8601
Вы можете вызывать методы toString для форматирования текста, используя общий и разумный стандарт ISO 8601.
Обратите внимание, что для ZonedDateTime метод toString расширяет стандарт ISO 8601, добавляя название часового пояса в квадратных скобках. Чрезвычайно полезная и важная информация, но не стандартная.
Пользовательский формат
Или укажите собственный шаблон форматирования с помощью класса DateTimeFormatter .
Укажите Locale для человеческого языка (английский, французский и т.д.), который будет использоваться при переводе названия дня/месяца, а также в определении культурных норм, таких как порядок года и месяца и даты. Обратите внимание, что Locale не имеет ничего общего с часовым поясом.
Localizing
ЛокализацияА еще лучше, пусть java.time выполняет работу по локализации автоматически.
О java.time
Среда java.time встроена в Java 8 и более поздние версии. Эти классы вытесняют проблемные старые устаревшие классы даты и времени, такие как java.util.Date , Calendar и & SimpleDateFormat .
Проект Joda-Time, который теперь находится в режиме обслуживания, рекомендует выполнить переход на классы java.time.
Чтобы узнать больше, см. Учебное пособие по Oracle. И поищите в Кару множество примеров и объяснений. Спецификация: JSR 310.
Вы можете обмениваться объектами java.time напрямую с вашей базой данных. Используйте драйвер JDBC, совместимый с JDBC 4.2 или более поздней версией. Нет необходимости в строках, нет необходимости в классах java.sql.* .
Где взять классы java.time?
Проект ThreeTen-Extra расширяет java.time дополнительными классами. Этот проект является полигоном для возможных будущих дополнений к java.time. Здесь вы можете найти несколько полезных классов, таких как Interval , YearWeek , YearQuarter и еще.
Ответ 11
Легко, вы можете проанализировать время, чтобы получить отдельные значения для текущего времени, следующим образом:
То же самое относится к дате, как показано ниже:
Ответ 12
Есть несколько вариантов, поскольку Android — это в основном Java, но если вы хотите записать его в textView, следующий код выполнит трюк:
Ответ 13
Форматы формата даты
Ответ 14
Ответ 15
Это метод, который будет полезен для получения даты и времени:
Вы можете вызвать этот метод и получить текущие значения даты и времени:
Ответ 16
Это даст вам, например, 12:32.
Не забудьте импортировать android.text.format.Time;
Ответ 17
Ответ 18
Вы также можете использовать android.os.SystemClock. Например, SystemClock.elapsedRealtime() даст вам более точные показания времени, когда телефон спит.
Ответ 19
Для настроенного формата времени и даты:
Вывод выглядит как ниже: 2015-06-18T10: 15: 56-05: 00
Ответ 20
Если вам нужна текущая дата,
Если вам нужно текущее время,
Ответ 21
Попробуйте это для меня тоже.
Ответ 22
Ответ 23
Вы можете получить дату, используя:
Это даст вам результат в хорошей форме, как в этом примере: «2014/02/09».
Ответ 24
Для текущей даты и времени в формате используйте
На Java
В Котлине
Шаблоны Date Formater
Ответ 25
вы можете просто использовать следующий код:
Ответ 26
Ну, у меня возникли проблемы с некоторыми ответами API, поэтому я скомплектовываю этот код, надеюсь, он будет обслуживать их ребята:
Вывод: 03:25 PM — 2017/10/03
Ответ 27
Ниже метод вернет текущую дату и время в String. Используйте другой часовой пояс в соответствии с вашим текущим часовым поясом. Я использовал GMT
Ответ 28
Вы должны использовать класс Calender в соответствии с новым API. Класс Date теперь устарел.
Ответ 29
Ответ 30
Попробуйте этот код, на котором отображаются текущие дата и время
Источник