2013-07-25 5 views
4

У меня есть метка времени в миллисе и хочу отформатировать ее, указывая день, месяц, год и час с минимальной точностью.Локализованный формат даты в Java

Я знаю, что могу указать формат, как это:

SimpleDateFormat simpleDateFormat = new SimpleDateFormat("MM/dd/yy HH:mm"); 
String formatted = simpleDateFormat.format(900000) 

Но я хотел бы формат быть локализованы с локали пользователя. Я также пробовал

DateFormat DATE_FORMAT = DateFormat.getDateInstance(DateFormat.SHORT, Locale.getDefault()); 
DATE_FORMAT.format(new Date()); 

Но он не показывает час. Как мне это сделать?

+0

Как примечание, кажется, что 'DateFormat.getDateTimeInstance (целое, целое)' 'называет DateFormat.getDateTimeInstance (интермедиат, внутр , Locale) 'используя' Locale.getDefault() 'в любом случае, по крайней мере, с текущей версией Android. – JAB

ответ

12

Используется joda время (http://joda-time.sourceforge.net/) замечания? Если нет, то я бы всем сердцем рекомендовал использовать эту замечательную библиотеку вместо громоздкого Java API.

Если нет, то вы могли бы использовать DateFormat.getDateTimeInstance(int, int, Locale)

Первый ИНТ стиль для час, другой стиль для времени, поэтому попробуйте использовать:

DateFormat f = DateFormat.getDateTimeInstance(DateFormat.SHORT, DateFormat.SHORT, Locale.getDefault()); 
String formattedDate = f.format(new Date()); 
System.out.println("Date: " + formattedDate); 

Смотрите, если это вас устраивает.

Выход для Locale.GERMANY: Дата: 25.07.13 10:57

Выход для Locale.US: Дата: 7/25/13 10:57 утра

+0

Как бы это сделать в случае библиотеки времени в Йоде? – Zax

1

Вы можете использовать метод getDateTimeInstance, of DateFormat. Здесь метод getDateTimeInstance принимает 3 аргумент

  1. стиля поля Даты
  2. стиля время поля
  3. локали, используя какой шаблон является автоматическим извлеченным

    DATE_FORMAT = DateFormat.getDateTimeInstance(DateFormat.SHORT, DateFormat.SHORT, Locale.US); 
    System.out.println(DATE_FORMAT.format(d)); 
    DATE_FORMAT = DateFormat.getDateTimeInstance(DateFormat.MEDIUM, DateFormat.MEDIUM, Locale.FRENCH); 
    System.out.println(DATE_FORMAT.format(d)); 
    
+0

Но если я укажу формат, что делает параметр Locale? – Addev

+0

Я обновил ответ. – sanbhat

1

Попробуйте некоторые вещь как это

SimpleDateFormat simpleDateFormat = new SimpleDateFormat("MM/dd/yy HH:mm", Locale.getDefault()); 
    String formatted = simpleDateFormat.format(900000); 
    System.out.println(simpleDateFormat.parse(formatted)); 
1

Вы можете использовать что-то вроде это:

SimpleDateFormat sdf = new SimpleDateFormat("MM/dd/yy HH:mm", Locale.getDefault()); 
String formatted = sdf .format(900000); 
System.out.println(simpleDateFormat.parse(formatted)); 
2

But it does not show the hour. How can I do it?

Вы должны вызвать DateFormat.getDateTimeInstance(int, int, Locale)

DateFormat.getDateInstance(int, Locale) => Получает дату форматировщик с заданным стилем форматирования для данного языка.

Хотя

DateFormat.getDateTimeInstance(int, int, Locale) => Получает дату/время форматировщик с заданными стилями форматирования для данного языка.

0

Использование Joda-Time можно обнаружить настройку системы и использовать другой формат времени:

String format; 

if (DateFormat.is24HourFormat(context)) { 
    format = "MM/dd/yy, hh:mm"; 
} 
else { 
    format = "MM/dd/yy, h:mm aa"; 
} 

DateTimeFormatter formatter = DateTimeFormat.forPattern(format); 
formatter.print(new DateTime()); 
Смежные вопросы