Пользовательский формат даты в Android для данной локали - PullRequest
2 голосов
/ 11 февраля 2012

Я пытаюсь отформатировать дату для данной локали new Locale("mk", "MK").Локаль действительна, она правильно возвращает название страны и язык.Я хочу использовать пользовательскую строку, в моем случае "E, kk: mm" или "EEEE, kk: mm".Я хочу, чтобы вывод был «сабота, 12:00», но я получаю «7, 12:00».

Вот как я его использую, и я пробовал много способов, но все они, кажется,ведут себя так же.

SimpleDateFormat sdf = new SimpleDateFormat("EEEE, kk:mm", new Locale("mk", "MK));
sdf.format(new Date());
// output: 7, 12:30

Другой метод, который я пробовал

Calendar calendar = Calendar.getInstance(new Locale("mk", "MK"));
calendar.setTimeInMillis(new Date().getTime());
DateFormat.format("EEEE, kk:mm", calendar);
// output: Saturday, 12:30

Я также пытался использовать java.text.DateFormat вместо класса Android, но без изменений.

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

Я просмотрел много ТАК вопросов по этой проблеме и не смог найти ответ.Меня не интересуют предопределенные форматы, я хочу использовать свой собственный формат и хочу, чтобы имена даты / месяца форматировались для входного языкового стандарта.

Ответы [ 3 ]

3 голосов
/ 11 февраля 2012

Я думаю, что проблема в том, что Македония не поддерживается на Android JVM.Если вы запускаете свой код как простое консольное приложение Java, это нормально.Метод Locale.getAvailableLocales () возвращает 152 члена в простой Java, и только 88 в эмуляторе Android.Если у вас есть фрагмент кода:

Locale[] locales = Locale.getAvailableLocales();
   String cCode;
   for (Locale loc :locales){
       cCode = loc.getCountry();
       if (cCode.equalsIgnoreCase("MK"))
            Toast.makeText(this, cCode, Toast.LENGTH_SHORT).show();
        // Or System.out.println() in a Java app    
}

, то тост не отображается для "MK", ​​хотя он будет печататься в приложении Java

2 голосов
/ 11 февраля 2012

NickT был быстрее :-), так что просто добавьте к его ответу: если вы хотите, чтобы ваши локали поддерживались на Android, запустите:

for (Locale l:Locale.getAvailableLocales()) {
    Log.d(l.getDisplayCountry(),l.toString()); 
}

, и вы увидите, что Македония отсутствует в списке,

2 голосов
/ 11 февраля 2012

Из документации SimpleDateFormat:

**Text**: For formatting, if the number of pattern letters is 4 or more, 
the full form is used; otherwise a short or abbreviated form is used if 
available. For parsing, both forms are accepted, independent of the 
number of pattern letters.

Так что это должно исправить:

SimpleDateFormat sdf = new SimpleDateFormat("EEEE, kk:mm", new Locale("mk", "MK"));
...