Android studio date format

Zheka’s blog

Monday, July 1, 2013

Форматирование даты/времени в Android приложении

Одним из аспектов локализации приложения является представление времени и даты в соответствии с настройками устройства. Различные страны/регионы используют разные форматы, как следствие, нужно учитывать ряд моментов.

Первая мысль, которая приходит в голову — это использование java.text.DateFormat (и как частный случай SimpleDateFormat ):

Данный подход хорошо работает, скажем, для вэб сервиса, но он совсем неприемлем для мобильных приложений. Т.к. с большой долей вероятности для конечного пользователя шаблон форматирования не является привычным. Например, не ясно когда часы(суточное время) должны быть представлены в 12-и или 24-х часовом формате.

Более правильный решение — это использовать android.text.format.DateFormat . Класс имеет ряд методов, возвращающих шаблон представления даты/времени в соответствии с системной локалью: getDateFormat() , getTimeFormat() и т.д.

Недостаток — это полное отсутствие гибкости. Скажем, что если я не хочу показывать год или наоборот — добавить день недели? Как можно догадаться, применять такое форматирование можно лишь в частном случае, когда нет жестких требований.

Мы подошли вплотную к правильному решению — DateUtils . Класс предоставляет семейство методов formatDateTime() и formatDateRange , принимающие флаги в качестве параметров, указывающие, какие поля нужно включить в шаблон. Преимущество в том, что форматирование осуществляется автоматически с учетом локали пользователя, избавляя нас от обработки всех тонкостей вручную:

DateUtils.formatDateRange() необходим для форматирования временного диапазона(например, «Jan 5 — Feb 12» ). Может возникнуть логичный вопрос. Для чего это нужно, если можно выполнить конкатенацию двух дат с использованием formatDateTime() ? Помимо того что он проще, в опр. условиях будет выполнена оптимизация представления даты за счет уменьшения количества отображаемых полей(например, если год/месяц не меняется в рамках диапазона):

Единственная вещь в formatDateRange() на которую следует обратить внимание — округления даты. Возможно вы заметили в примере выше, что верхняя граница диапазона была округлена в меньшую сторону(до 24 декабря вместо 25-го). Это произошло из-за того, что было выполнено отсечение по суточной границе(оригинальный текст — that’s because it cuts off at midnight). Если добавить миллисекунды, то диапазон будет представлен верно.

Чтобы ваше приложение правильно представляло дату/время и по прежнему имело возможность контролировать формат DateUtils — хорошая отправная точка. Зная и умело используя флаги, можно добиться определенной гибкости.

Источник

Как вы форматируете дату и время в Android?

Как вы правильно отформатируете в соответствии с конфигурацией устройства дату и время, когда у вас есть год, месяц, день, час и минута?

Используйте стандартный класс Java DateFormat.

Например, чтобы отобразить текущую дату и время, выполните следующие действия:

Вы можете инициализировать объект Date своими собственными значениями, однако вы должны знать, что конструкторы устарели, и вы действительно должны использовать объект Java Calendar.

На мой взгляд, android.text.format.DateFormat.getDateFormat(context) меня смущает, потому что этот метод возвращает java.text.DateFormat а не android.text.format.DateFormat – – «.

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

Кроме того, вы можете использовать другие форматы. Следуйте за DateFormat .

Дата для строки даты локали:

-> 31 декабря 1969 года

-> 31 декабря 1969 года 16:00:00

Это сделает это:

Использовать SimpleDateFormat

Лучше использовать родной язык Android. Класс времени:

Это мой метод, вы можете определять и вводить и выводить формат.

Используйте сборку в классе времени!

SimpleDateFormat

Я использую SimpleDateFormat без настраиваемого шаблона, чтобы получить фактическую дату и время из системы в предварительно выбранном формате устройства:

Возвращает :

Используйте эти два как переменные класса:

И используйте его вот так:

Этот код вернет текущую дату и время:

И когда вы получаете доступ к переданным переменным:

Я использую его так:

Избегайте juDate

Java.util.Date и .Calendar и SimpleDateFormat на Java (и Android), как известно, являются неприятными. Избежать их. Они настолько плохи, что Sun / Oracle отказались от них, вытеснив их новым пакетом java.time в Java 8 (не в Android от 2014 года). Новый java.time был вдохновлен библиотекой Joda-Time .

Joda времени

Joda-Time работает в Android.

Найдите StackOverflow для «Joda», чтобы найти много примеров и много дискуссий.

Это лакомый кусок исходного кода с использованием Joda-Time 2.4.

Вернуться к 2016, Когда я хочу настроить формат (не в соответствии с конфигурацией устройства, как вы просите …) Обычно я использую файл строкового ресурса:

Читайте также:  Лучший проводник для андроид 2021

Это также полезно при выпуске новой библиотеки привязки даты .

Поэтому я могу иметь что-то подобное в файле макета:

И в классе java:

Вот как я это сделал:

Надеюсь, это полезно 🙂

Слишком поздно, но это может помочь кому-то

Здесь format – это формат, который вам нужен

Источник

Диалоговые окна

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 , который изменяет время на текстовом поле.

И поле запуска, нажав на кнопку изменения времени, мы сможем установить время:

Источник

Изучите Java для разработки под Android: основы даты и времени

В этом руководстве вы научитесь работать с датами и временем в Java и в приложениях Android. Данные о дате и времени могут быть определены, изменены и сохранены различными способами.

Приложения Android написаны на Java, языке программирования. В Java есть несколько примитивных типов данных для различных типов чисел (целые числа, числа с плавающей запятой и т. Д.), Логических значений и одиночных символов. Java также включает в себя множество классов для хранения, форматирования и изменения данных даты и времени для использования в ваших приложениях Android. В этом руководстве вы узнаете, как определить текущую дату и время, сохранить данные о дате и времени и отобразить их несколькими способами.

Что вам нужно

Технически, вам не нужны никакие инструменты для завершения этого урока, но вам, безусловно, они понадобятся для разработки приложений для Android.

Для разработки приложений Android (или любых других приложений Java) вам необходима среда разработки для написания и создания приложений. Eclipse — это очень популярная среда разработки (IDE) для Java и предпочтительная IDE для разработки под Android. Он свободно доступен для операционных систем Windows, Mac и Linux.

Полные инструкции по установке Eclipse (включая поддерживаемые версии) и Android SDK см. На веб-сайте разработчиков Android .

Что такое дата или время, правда?

Перво-наперво: дата и время — это две части одного и того же фрагмента данных (момент времени). Когда дело доходит до хранения даты и времени на компьютере, может быть полезно вспомнить ваш первый компьютерный класс и вспомнить, что все данные на компьютере состоят из «единиц и нулей». Компьютеры (и устройства Android не являются исключением) на самом деле не имеют ощущения времени, как люди, но вместо этого сохраняют числовое представление текущей даты или времени (всегда тикают вперед, по одной миллисекунде за раз), а затем форматируют эту информацию в различные способы удовлетворить конкретные цели. В конце концов, один момент времени интерпретируется по-разному в зависимости от вашего часового пояса или местоположения, признаете ли вы (или ваш район) переход на летнее время и различные другие факторы.

Добавьте к этому тот факт, что даты и время отображаются по-разному в разных культурах и регионах. Например, в Соединенных Штатах мы часто форматируем наши даты следующим образом: 6 апреля 1981 г. или 04/06/1981, тогда как в Европе день обычно предшествует месяцу, например: 6 апреля 1981 г. или 06/04 / 1981. Аналогичным образом, в некоторых странах существует концепция AM и PM с 12-часовым режимом, тогда как в других просто используются 24-часовые часы.

Компьютеры, включая устройства Android, рассчитывают время и дату как одно число (длинное), которое увеличивается с течением времени. Само число соответствует количеству миллисекунд, прошедших с определенной даты в прошлом. В этом случае момент времени, в который начало отсчитываться «время», это: полночь, 1 января 1970 года. Этот механизм называется временем Unix или временем POSIX .

Читайте также:  Tv dongle and android tv

Что делать разработчику?

Поп-викторина! Какая из следующих строк правильно представляет 4-й месяц (григорианского) календарного года: A, апрель, апрель, апрель, 4 или 04? Ответ? Все они. Работа с датами и временем уже кажется немного сложной, не так ли? На самом деле, мы быстро просмотрели все справочники по Java в нашем офисе (не так уж существенно) и очень мало освещали даты и время каким-либо существенным образом. Но не паникуйте. Просто примите тот факт, что, как разработчик, вам придется приложить немного усилий для достижения двух целей:

1. Ваша внешняя цель: позволить пользователю работать с форматами даты и времени, которые ему наиболее удобны или, по крайней мере, знакомы.
2. Ваша внутренняя цель: сохранить код приложения независимым от формата, чтобы он работал везде без особых хлопот.

Теперь давайте немного поговорим о каждой из этих целей.

Внешняя цель: быть гибким и использовать стандартные элементы управления

Вы когда-нибудь замечали, что несколько туристических сайтов позволяют пользователю вручную вводить информацию о дате или времени? Вместо этого они полагаются на средства выбора календаря и выпадающие списки с фиксированным днем, месяцем и годом или, как минимум, применяют определенный формат даты (обычно привязанный к вашему языку / стране, который они запрашивают заранее). С точки зрения пользовательского интерфейса, ваши приложения должны учитывать нюансы даты и времени, по крайней мере, до некоторой степени. Тем не менее, вы также должны внимательно рассмотреть методы, с помощью которых пользователь может вводить информацию о дате и времени. Используя стандартные средства выбора даты и времени в своих приложениях для Android, такие как DatePicker и TimePicker, вы эффективно ограничиваете ввод данных, которые пользователи могут вводить, тем, что может быть легко преобразовано в соответствующие структуры даты и времени, без необходимости разбора всех известных форматов (не для упомянуть его опечатки).

Внутренняя цель: сохранить свои даты и время родовыми

С точки зрения внутреннего кода, ваши приложения должны использовать общее представление даты / времени, которое не зависит от этих нюансов.

В Java даты и время хранятся несколькими способами, в зависимости от ваших требований.

Источник

Получить текущее время и дату на 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.

Затем вы можете получить все поля даты, которые вы хотите, например:

См. Раздел android.text.format.Time для всех деталей.

ОБНОВИТЬ

Как многие люди указывают, Google говорит, что этот класс имеет ряд проблем и больше не должен использоваться:

У этого класса есть ряд проблем, поэтому рекомендуется использовать GregorianCalendar.

По историческим причинам при выполнении вычислений времени вся арифметика в настоящее время выполняется с использованием 32-битных целых чисел. Это ограничивает надежный временной диапазон, представляемый с 1902 года по 2037 год. Подробнее см. Статью в википедии о проблеме 2038 года. Не полагайтесь на это поведение; Он может измениться в будущем. Вызов switchTimezone (String) на дату, которая не может существовать, например, время стены, которое было пропущено из-за перехода на летнее время, приведет к дате в 1969 году (т.е. -1 или 1 секунде до 1 января 1970 UTC). Большая часть форматирования / синтаксического анализа предполагает текст ASCII и поэтому не подходит для использования с не-ASCII-скриптами.

Для текущей даты и времени используйте:

Чтобы указать текущее время, вы можете использовать System.currentTimeMillis() который является стандартным для Java. Затем вы можете использовать его для создания даты

И как упоминалось другими, чтобы создать время

Попробуйте таким образом. Все форматы приведены ниже, чтобы получить формат даты и времени.

Читайте также:  Полная версия apk для андроида

Вы можете использовать код:

Здесь вы также можете получить дополнительные параметры форматирования для SimpleDateFormat .

Легко, вы можете проанализировать время, чтобы получить отдельные значения для текущего времени, а именно:

То же самое касается даты:

Существует несколько вариантов, поскольку Android – это в основном Java, но если вы хотите записать его в текстовом виде, следующий код будет делать трюк:

ТЛ; др

Детали

Остальные ответы, правда, устарели. Старые классы времени-времени оказались плохо спроектированными, запутанными и сложными.

java.time

Эти старые классы были заменены рамкой java.time .

  • Java 8 и более поздние версии: фреймворк java.time встроен.
  • Java 7 и 6: используйте обратный путь java.time .
  • Android: используйте эту завернутую версию этого backport .

Эти новые классы вдохновлены очень успешным проектом Joda-Time , определенным JSR 310 , и расширенным проектом ThreeTen-Extra .

См. Учебник Oracle .

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, добавляя имя часового пояса в квадратных скобках. Очень полезная и важная информация, но не стандартная.

2016-03-22T20: 09: 01.613-08: 00 [Америка / Los_Angeles]

Пользовательский формат

Или укажите свой собственный шаблон форматирования с классом DateTimeFormatter .

Укажите язык для человеческого языка (английский, французский и т. Д.), Чтобы использовать при переводе названия дня / месяца, а также в определении культурных норм, таких как порядок года и месяца и даты. Обратите внимание, что Locale имеет никакого отношения к часовому поясу.

Локализации

Еще лучше, пусть java.time выполняет работу по локализации автоматически.

О java.time

Рамка java.time встроена в Java 8 и более поздних версий . Эти классы вытесняют неприятные старые устаревшие классы времени, такие как java.util.Date , java.text.SimpleDateFormat и java.text.SimpleDateFormat .

Проект Joda-Time , теперь в режиме обслуживания , советует перейти на java.time.

Дополнительную информацию можно найти в учебнике Oracle . И поиск Stack Overflow для многих примеров и объяснений. Спецификация – JSR 310 .

Где получить классы java.time?

  • Java SE 8 и SE 9 и более поздние версии
    • Встроенный.
    • Часть стандартного Java API с интегрированной реализацией.
    • Java 9 добавляет некоторые незначительные функции и исправления.
  • Java SE 6 и SE 7
    • Большая часть функциональных возможностей java.time портирована на Java 6 и 7 в ThreeTen-Backport .
  • Android
    • Проект ThreeTenABP адаптирует ThreeTen-Backport (упомянутый выше) специально для Android.
    • См. Как использовать ….

Проект ThreeTen-Extra расширяет java.time с дополнительными классами. Этот проект является доказательством возможных будущих дополнений к java.time. Здесь вы можете найти полезные классы, такие как Interval , YearWeek , YearQuarter и т . Д.

Форматы формата даты

Вы также можете использовать android.os.SystemClock. Например, SystemClock.elapsedRealtime () даст вам более точные показания времени, когда телефон спит.

Это даст вам, например, 12:32.

Не забудьте импортировать android.text.format.Time;

Вы можете получить дату, используя:

Это даст вам результат в хорошей форме, как в этом примере: «2014/02/09».

Для настроенного формата времени и даты:

Результат выглядит как ниже: 2015-06-18T10: 15: 56-05: 00

Попробуйте это для меня тоже.

Это метод, который будет полезен для получения даты и времени:

Вы можете вызвать этот метод и получить текущие значения даты и времени:

Вы можете просто использовать следующий код:

Вы должны использовать класс Calender в соответствии с новым API. Класс Date теперь устарел.

Попробуйте этот код, на котором отображаются текущие дата и время

Если вам нужна текущая дата,

Если вам нужно текущее время,

Попробуйте использовать ниже код:

Чтобы получить короткую форматированную по дате строку String в локализованном формате устройства.

Я не могу понять, почему так много ответов являются жестко заданными форматами даты и времени, когда OS / Java поставляет правильную локализацию Дат и времени? Разве лучше не использовать форматы устройства, а не программиста?

Он также обеспечивает чтение дат в локализованных форматах:

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

В пакете com.google.gson.internal.bind.util есть класс ISO8601Utils utils, поэтому, если вы используете GSON в своем приложении, вы можете использовать его.

Он поддерживает миллисы и часовые пояса, поэтому это довольно хороший вариант прямо из коробки.

Источник

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