Форматирование даты на основе пользовательской локали на Android

Я хочу показать дату рождения на основе пользовательской локали. В моем приложении одним из моих полей является дата рождения, которая в настоящее время находится в формате dd / mm / yyyy. Поэтому, если пользователь меняет свой язык, формат даты также должен соответствующим образом меняться. Любые указатели или примеры кода действительно помогут мне преодолеть эту проблему.

Solutions Collecting From Web of "Форматирование даты на основе пользовательской локали на Android"

Вы можете использовать класс DateFormat, который форматирует дату в соответствии с языком пользователя.

Пример:

String dateOfBirth = "26/02/1974"; SimpleDateFormat sdf = new SimpleDateFormat("dd/MM/yyyy"); Date date = null; try { date = sdf.parse(dateOfBirth); } catch (ParseException e) { // handle exception here ! } java.text.DateFormat dateFormat = android.text.format.DateFormat.getDateFormat(context); String s = dateFormat.format(date); 

Вы можете использовать различные методы getLongDateFormat , getMediumDateFormat зависимости от уровня getLongDateFormat , getMediumDateFormat вы хотели бы иметь.

Чтобы изменить формат даты в соответствии с языковой версией, для меня работал следующий код:

  String dateOfBirth = "26/02/1974"; SimpleDateFormat sdf = new SimpleDateFormat("dd/MM/yyyy"); Date date = null; try { date = sdf.parse(dateOfBirth); } catch (ParseException e) { // handle exception here ! } String myString = DateFormat.getDateInstance(DateFormat.SHORT).format(date); 

Затем, когда вы измените локаль, формат даты изменится на основе этого. Дополнительные сведения о шаблонах дат: http://docs.oracle.com/javase/tutorial/i18n/format/dateFormat.html

Android api обеспечивает простой способ отображения локализованного формата даты. Работает следующий код.

 public class FileDateUtil { public static String getModifiedDate(long modified) { return getModifiedDate(Locale.getDefault(), modified); } public static String getModifiedDate(Locale locale, long modified) { SimpleDateFormat dateFormat = null; if (Build.VERSION.SDK_INT >= Build.VERSION_CODES.JELLY_BEAN_MR2) { dateFormat = new SimpleDateFormat(getDateFormat(locale)); } else { dateFormat = new SimpleDateFormat("MMM/dd/yyyy hh:mm:ss aa"); } return dateFormat.format(new Date(modified)); } @TargetApi(Build.VERSION_CODES.JELLY_BEAN_MR2) public static String getDateFormat(Locale locale) { return DateFormat.getBestDateTimePattern(locale, "MM/dd/yyyy hh:mm:ss aa"); } } 

Вы можете проверить следующий код.

 String koreaData = FileDateUtil.getModifiedDate(Locale.KOREA, System.currentTimeMillis()); String franceData = FileDateUtil.getModifiedDate(Locale.FRENCH, System.currentTimeMillis()); String defaultData = FileDateUtil.getModifiedDate(Locale.getDefault(), System.currentTimeMillis()); String result = "Korea : " + koreaData + System.getProperty("line.separator"); result += "France : " + franceData + System.getProperty("line.separator"); result += "Default : " + defaultData + System.getProperty("line.separator"); tv.setText(result);