2016-04-27 3 views
1

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

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

В случае это дд/мм/гггг или мм/дд/гггг или гггг/дд/мм

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

Я сделал код ниже, но мне не нравится тот факт, я использую подстроку, потому что, если 01/02 стать 1/2 Это не работает

DateFormat.getDateInstance(DateFormat.SHORT).format(new Date(tweetsCreatedTime)).substring(0,5) 

tweetsCreatedTime в Миллисек и определяется как долго

Вместо того, чтобы использовать локальные, лучше получить настройки и убедиться, что даже если локальный показывает EN или US, пользователь не меняет способ его отображения.

Благодаря

ответ

1

Я использую DateFormat:

java.text.DateFormat dateFormat = DateFormat.getTimeFormat(context); 
String dateString = dateFormat.format(date); 

Имейте в виду, что это также возвращает класс с именем java.text.DateFormat но это другой класс.

0

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

/** 
* Get localized date string (Using given locale) 
* 
* @param dateString Date string 
* @param locale  Desired locale 
* @return Formatted localized date string 
*/ 
public static String formatLocalized(String dateString, Locale locale) { 
    Date date = formatDate(dateString, locale); 
    SimpleDateFormat iso8601Format = new SimpleDateFormat("d MMM yyyy", locale); 
    iso8601Format.setTimeZone(TimeZone.getTimeZone("UTC")); 
    return iso8601Format.format(date); 

} 

определяет локальный используя Locale.ENGLISH | Locale.FRENCH ...

+0

спасибо, но вы форсируете формат в SimpleDateFormat. Есть ли способ получить этот формат из настроек устройства. – Seb

+0

. Я думаю, что вы можете получить с устройства, ведь используется локальная локация, и это значение можно найти с помощью Locale.getDefault(); но способ отображения даты зависит от вас, если локаль на французском языке отображает его с использованием французского формата или если язык является английским (скорее всего;) отображает дату с использованием английского формата – thunder413

0

java.time

Вы должны использовать моды ern date-classes из пакета java.time.

Подробнее см. my Answer от почти идентичного вопроса, How can I format Date with Locale in Android.

Код ошибки, внесенный в неправильный код tweetsCreatedTime - tweetMillisecondsSinceEpoch для long числовая переменная данного типа. Обратите внимание, что хотя ваш ввод в миллисекундах, классы java.time на самом деле способны к гораздо более тонкому разрешению наносекунд.

Instant instant = Instant.ofEpochMilli(tweetMillisecondsSinceEpoch); // Number of milliseconds since the POSIX epoch of first moment of 1970 in UTC. 
ZoneId zoneId = ZoneId.of("Pacific/Auckland"); // Arbitrary choice of time zone. Crucial it determining the date, as date varies with a new day dawning earlier to the east. 
ZonedDateTime zdt = ZonedDateTime.ofInstant(instant , zoneId); // Apply a time zone. 
DateTimeFormatter formatter = DateTimeFormatter.ofLocalizedDate(FormatStyle.MEDIUM); // Let java.time translate human language and determine cultural norms in formatting. 
formatter = formatter.withLocale(Locale.CANADA_FRENCH); // Arbitrarily choosing Québec as the Locale. Note that Locale has *nothing* to do with time zone. You could use Chinese locale for a time zone in Finland. 
String output = zdt.format(formatter); // Generate String representation of our date-time value. 

2015-05-23

Смежные вопросы