Как можно создать текстовое представление некоторой даты, что учитывает языковой стандарт и содержит только день и месяц (без года)?
Следующий код дает мне что-то вроде 23.09.2010
DateFormat.getDateInstance(DateFormat.SHORT, Locale.getDefault()).format(date);
Я хочу получить 23.09
Я сделал это так:
DateFormat dateFormat = DateFormat.getDateInstance(DateFormat.SHORT, Locale.getDefault());
if (dateFormat instanceof SimpleDateFormat) {
SimpleDateFormat simpleDateFormat = (SimpleDateFormat) dateFormat;
String pattern = simpleDateFormat.toPattern();
// I modified the pattern here so that dd.MM.yyyy would result to dd.MM
simpleDateFormat.applyPattern(modifiedPattern);
... etc
}
Это будет работать для Android , если это кому-то нужно:
int flags = DateUtils.FORMAT_SHOW_DATE | DateUtils.FORMAT_NO_YEAR;
String monthAndDayText = DateUtils.formatDateTime(context, date, flags);
Основная трудность здесь заключается в том, что в некоторых регионах порядок месяца и дня различен. Я решил это таким образом, который отличается от тех, которые представлены здесь, и надеюсь, что это работает для всех случаев.
Date dateObject = ...;
String dayMonthDateString = getDayMonthDateString(dateObject, Locale.GERMANY);
Log.i("customDate", "dayMonthDateString = " + dayMonthDateString);
private String getDayMonthDateString(Date date, Locale locale)
{
try
{
boolean dayBeforeMonth = defineDayMonthOrder(locale);
SimpleDateFormat newDateFormat;
if (dayBeforeMonth)
{
newDateFormat = new SimpleDateFormat("dd/MM", locale);
}
else
{
newDateFormat = new SimpleDateFormat("MM/dd", locale);
}
return newDateFormat.format(date);
}
catch (ParseException e)
{
e.printStackTrace();
}
return null;
}
private boolean defineDayMonthOrder(Locale locale) throws ParseException
{
String day = "10";
String month = "11";
String year = "12";
String calendarDate = day + "." + month + "." + year;
SimpleDateFormat format = new SimpleDateFormat("dd.MM.yy");
Date date = format.parse(calendarDate);
String localizedDate = SimpleDateFormat.getDateInstance(SimpleDateFormat.SHORT, locale).format(date);
int indexOfDay = localizedDate.indexOf(day);
int indexOfMonth = localizedDate.indexOf(month);
return indexOfDay < indexOfMonth;
}