android text format dateformat

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

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

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

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

По-моему, android.text.format.DateFormat.getDateFormat(context) меня смущает, потому что этот метод возвращает java.text.DateFormat , а не android.text.format.DateFormat — — «.

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

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

Вы можете использовать DateFormat . Результат зависит от языка Locale по умолчанию, но вы также можете указать Locale:

Это результаты на телефоне во французском языке:

==> vendredi 3 ноября 2017

==> 3 нов. 2017 16:04:58

==> 03/11/2017 16:04:58 GMT + 01: 00

==> 03/11/2017 16:04:58 heure normale dEurope centrale

==> 16:04:58 GMT + 01: 00

==> 16:04:58 heure normale dEurope centrale

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

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

— > 31 декабря 1969 года 4:00:00 PM

Это будет сделано:

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

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

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

И используйте его следующим образом:

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

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

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

возвращает

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

Другие ответы, как правило, правильны. Я хотел бы внести современный ответ. Классы Date , DateFormat и SimpleDateFormat , используемые в большинстве других ответов, давно устарели и вызвали проблемы для многих программистов на протяжении многих лет. Сегодня у нас намного лучше в java.time , AKA JSR-310, современном API дат и времени Java. Можете ли вы использовать это на Android еще? Несомненно! Современные классы были отправлены на Android в проект ThreeTenABP. См. этот вопрос: как использовать ThreeTenABP в Android Project для всех деталей.

Этот фрагмент должен начать работу:

Когда я задаю предпочитаемый язык моим компьютерам на английском или английском английском, это напечатает:

Когда я устанавливаю его на датский, я получаю:

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

Monday, July 1, 2013

Форматирование даты/времени в Andro >

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

Первая мысль, которая приходит в голову — это использование 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 — хорошая отправная точка. Зная и умело используя флаги, можно добиться определенной гибкости.

Когда я использую флаг «HH» в android.text.format.DateFormat , он интерпретируется как буквальный «HH». Но когда я использую java.text.SimpleDateFormat он интерпретируется как 2-значный Час. Почему они разные?

Я не ищу рабочую альтернативу (я уже знаю, что мне нужно использовать kk вместо HH ). Мне просто интересно, почему «HH» не признается.

Я ожидаю, что оба будут 26-05-2013 22:36:34

Есть ли у Android DateFormat ошибка?

Java SimpleDateFormat принимает эти:

Таким образом, разработчики Android решили изменить значение k а в их функции DateFormat он эквивалентен SimpleDateFormat H как они прямо говорят на странице документации :

Что является причиной этого?

Я понимаю, что вы уже приняли ответ, но просто для того, чтобы полностью объяснить это вам …

Из исходного кода для DateFormat.java …

Методы <@code format>в этом классе реализуют подмножество Unicode UTS # 35 . Подмножество, поддерживаемое этим классом, включает следующие символы формата: <@code acdEHhLKkLMmsyz>. До уровня API уровня 17 поддерживались только <@code adEhkMmszy>. Обратите внимание, что этот класс неправильно реализует <@code k>, как если бы он был <@code H>для обратной совместимости.

Обратите внимание на ту часть, которую я выделил жирным шрифтом.

Источник, с которым я связан, был обновлен, чтобы разрешить использование H, но он еще не находится в общем выпуске (API 17 – это текущая версия Android и не поддерживает H).

Позже в источнике, на этапе объявления символьных констант формата, есть этот комментарий …

… и позже во время замены персонажа …

Потому что … это не одно и то же, и он ведет себя так, как говорится в документации.

Из документации для android.text.format.DateFormat

Этот класс поддерживает только подмножество полной спецификации Unicode. Используйте SimpleDateFormat, если вам нужно больше.

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

Public static final char HOUR_OF_DAY

Этот указатель указывает час дня в 24-часовом формате. Пример для 3 вечера: k -> 15 Примеры для полночи: k -> 0 kk -> 00

Итак … используя этот класс, это будет kk вместо HH

Для android.text.format.DateFormat вы назначаете Hour in day как kk следующим образом:

Для java.text.SimpleDateFormat вы назначаете час в день как HH .

Документация для android.text.format.DateFormat:

Public static final char HOUR_OF_DAY

Этот указатель указывает час дня в 24-часовом формате. Пример для 3 вечера: k -> 15 Примеры для полночи: k -> 0 kk -> 00

Я никогда не программировал для Android. Я googled DateFormat javadoc и увидел там следующие примеры:

«Час» отмечен маленькой буквой h в противоположность SimpleDateFormat где для этой цели используется заглавная буква.

Эта работа для всех Android 4.0+ и для двух дат.

24-часовой формат использует этот шаблон даты = « dd-MM-yyyy HH: mm »;

12-часовой формат использует этот шаблон даты = » dd-MM-yyyy hh: mm a «;

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