Форматирование даты и времени в зависимости от локали - PullRequest
28 голосов
/ 20 февраля 2011

Я новичок в разработке Java и Android, так что это может быть глупым вопросом, но я искал несколько дней и не могу найти решение:

Я пытаюсь вывести java.util.Date в зависимости от локали пользователя.

Поиск в StackOverflow привел меня к этому:

java.util.Date date = new Date();
String dateString = DateFormat.getDateFormat(getApplicationContext()).format(date);

Это выводит:

20/02/2011

На моем французском локализованном телефоне. Почти нормально.

Как я также могу вывести часы, минуты и секунды из Date, используя локаль пользователя? Я искал в документации по Android, но ничего не смог найти.

Большое спасибо.

Ответы [ 6 ]

32 голосов
/ 20 февраля 2011

Использование android.text.format.DateFormat.getTimeFormat()

ref: http://developer.android.com/reference/android/text/format/DateFormat.html

9 голосов
/ 12 октября 2016

ТЛ; др

ZonedDateTime.now( ZoneId.of( "Asia/Kolkata" ) )
             .format( DateTimeFormatter.ofLocalizedDateTime ( FormatStyle.FULL ).withLocale ( Locale.FRENCH ) )

java.time

Код в Вопросе использует старые классы даты и времени, которые в настоящее время унаследованы, заменены классами java.time, встроенными в Java 8 и более поздние версии.

Язык и часовой пояс не имеют ничего общего друг с другом. Локаль определяет человеческий язык и культурные нормы, используемые при создании строки для представления значения даты и времени. Часовой пояс определяет время настенных часов определенного региона, используемое для представления момента на временной шкале.

Класс Instant представляет момент на временной шкале в UTC с разрешением наносекунд (до девяти (9) цифр десятичного знака) доля).

Instant instant = Instant.now();

2016-10-12T07: 21: 00.264Z

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

ZoneId z = ZoneId.of( "Asia/Kolkata" );
ZonedDateTime zdt = instant.atZone( z );

2016-10-12T12: 51: 00,264 + 05: 30 [Азия / Калькутта] * * тысяча тридцать-один

Генерация строки с использованием языка Квебек, Канада. Пусть java.time автоматически локализует строку.

Locale l = Locale.CANADA_FRENCH;
DateTimeFormatter f = DateTimeFormatter.ofLocalizedDateTime ( FormatStyle.FULL ).withLocale ( l );
String output = zdt.format ( f );  // Indian time zone with Québécois presentation/translation.

mercredi 12 октября 2016 12 ч 51 IST


О java.time

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

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

Чтобы узнать больше, см. Oracle Tutorial . И поиск переполнения стека для многих примеров и объяснений. Спецификация 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

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

6 голосов
/ 12 сентября 2014

java.text.DateFormat имеет все функции, которые вам могут понадобиться:

DateFormat.getDateInstance()

DateFormat.getTimeInstance()

Но вам нужно:

DateFormat.getDateTimeInstance() Вы также можете указать длину части даты / времени и локаль. Конечный результат будет:

DateFormat.getDateTimeInstance(DateFormat.LONG, DateFormat.SHORT, Locale.FRENCH).format(Date);

Источник: http://docs.oracle.com/javase/7/docs/api/java/text/DateFormat.html

3 голосов
/ 27 августа 2012

DateFormat.getTimeInstance() получает средство форматирования времени со стилем форматирования по умолчанию для локали по умолчанию. Вы также можете передать стиль и Locale.

1 голос
/ 11 декабря 2012
public static String formatDate(Date date, boolean withTime)
{
    String result = "";
    DateFormat dateFormat;

    if (date != null)
    {
        try
        {
            String format = Settings.System.getString(context.getContentResolver(), Settings.System.DATE_FORMAT);
            if (TextUtils.isEmpty(format))
            {
                dateFormat = android.text.format.DateFormat.getDateFormat(context);
            }
            else
            {
                dateFormat = new SimpleDateFormat(format);
            }
            result = dateFormat.format(date);

            if (withTime)
            {
                dateFormat = android.text.format.DateFormat.getTimeFormat(context);
                result += " " + dateFormat.format(date);
            }
        }
        catch (Exception e)
        {
        }
    }

    return result;
}
0 голосов
/ 20 февраля 2011

Если вам нужны часы и миллисекунды текущей локали, используйте Calendar.getInstance (). GetTime () покажет время текущей локали

...