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

#android #date #localization

#Android #Дата #локализация

Вопрос:

Я пытаюсь получить строку даты с сокращенной формой дня недели и месяца в дополнение к дню месяца.

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

Вт, 17 июня

и пользователь с немецким языком увидит:

Di. 17 Juni

Я просматривал android.text.format.DateFormat документы, и getBestDateTimePattern(Locale locale, String skeleton) казалось, что это может сработать, но для этого требуется API 18 , поэтому я не могу его использовать.

Есть ли способ получить такой короткий формат, основанный на текущей локали пользователя?

Ответ №1:

Хорошо, я думаю, что я наконец понял это:

 int flags = DateUtils.FORMAT_SHOW_DATE | 
            DateUtils.FORMAT_NO_YEAR | 
            DateUtils.FORMAT_ABBREV_ALL | 
            DateUtils.FORMAT_SHOW_WEEKDAY;

dateTextView.setText(DateUtils.formatDateTime(this, millis, flags));
  

Для английской локали вы получаете:

Ср., 18 июня

а для немецкого языка вы получаете:

Mi., 18. Juni

а для французского языка вы получаете:

mer. 18 juin

Ответ №2:

Вы должны использовать getMeduimDateFormat(Context) , это соответствует текущей локали и предпочтениям пользователя.

Комментарии:

1. Спасибо за вашу помощь. Это было близко, но не совсем то, что я искал.

Ответ №3:

попробуйте приведенный ниже код:-

 public class DateFormatDemoSO {
  public static void main(String args[]) {
    int style = DateFormat.MEDIUM;
    //Also try with style = DateFormat.FULL and DateFormat.SHORT
    Date date = new Date();
    DateFormat df;
    df = DateFormat.getDateInstance(style, Locale.UK);
    System.out.println("United Kingdom: "   df.format(date));
    df = DateFormat.getDateInstance(style, Locale.US);
    System.out.println("USA: "   df.format(date));   
    df = DateFormat.getDateInstance(style, Locale.FRANCE);
    System.out.println("France: "   df.format(date));
    df = DateFormat.getDateInstance(style, Locale.ITALY);
    System.out.println("Italy: "   df.format(date));
    df = DateFormat.getDateInstance(style, Locale.JAPAN);
    System.out.println("Japan: "   df.format(date));
  }
}
  

для получения дополнительной информации смотрите ссылку ниже :-

http://www.java2s.com/Code/Java/Data-Type/DateFormatwithLocale.htm

Комментарии:

1. Спасибо за ваш ответ. Однако эти строки даты были слишком длинными.

Ответ №4:

Joda-Время

Используйте библиотеку Joda-Time.

 DateTimeFormatter formatter = DateTimeFormat.forStyle( "S-" ).withLocale( java.util.Locale.getDefault() ); // "S" for short date format. "-" to suppress the time portion. Specify locale for cultural rules about how to format a String representation.
DateTime dateTime = new DateTime( someDateObject, DateTimeZone.getDefault() ); // Convert a java.util.Date object to an org.joda.time.DateTime object. Specify time zone to assign to DateTime.
String output = formatter.print( dateTime ); // Generate String representation of date-time value.
  

Комментарии:

1. Привет, Бэзил, спасибо за ваш ответ. Мне действительно нужно изучить время Joda, поскольку я продолжаю много слышать об этом, но на данный момент я решил проблему в ответе, который я опубликовал.