Форматирование даты на основе локали пользователя на android
Я хочу, чтобы отобразить дату рождения на основе локали пользователя. В моем приложении одним из моих полей является дата рождения, которая в настоящее время находится в формате dd/mm/yyyy
. Поэтому, если пользователь изменяет свою локаль, формат даты также должен измениться соответствующим образом. Любые указатели или примеры кода действительно помогут мне преодолеть эту проблему.
5 ответов
можно использовать 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
в зависимости от уровня детализации вы хотели бы получить.
чтобы изменить формат даты в соответствии с языковым стандартом, мне работал следующий код:
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);
Как просто
дата + время:
DateFormat format = DateFormat.getDateTimeInstance(DateFormat.DEFAULT, DateFormat.SHORT, Locale.getDefault());
только для даты:
DateFormat format = DateFormat.getDateInstance(DateFormat.SHORT, Locale.getDefault());
чтобы получить формат даты вы можете сделать :
Format dateFormat = android.text.format.DateFormat.getDateFormat(getApplicationContext());
String pattern = ((SimpleDateFormat) dateFormat).toLocalizedPattern();
после этого вы можете отформатировать свой ввод в соответствии с шаблоном.