Формат даты без года

Как можно создать текстовое представление некоторой даты, что учитывает языковой стандарт и содержит только день и месяц (без года)?

Следующий код дает мне что-то вроде 23.09.2010

DateFormat.getDateInstance(DateFormat.SHORT, Locale.getDefault()).format(date);

Я хочу получить 23.09

28
задан fhucho 24 September 2010 в 22:44
поделиться

3 ответа

Я сделал это так:

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
}
4
ответ дан 28 November 2019 в 02:29
поделиться

Это будет работать для Android , если это кому-то нужно:

int flags = DateUtils.FORMAT_SHOW_DATE | DateUtils.FORMAT_NO_YEAR;
String monthAndDayText = DateUtils.formatDateTime(context, date, flags);
44
ответ дан 28 November 2019 в 02:29
поделиться

Основная трудность здесь заключается в том, что в некоторых регионах порядок месяца и дня различен. Я решил это таким образом, который отличается от тех, которые представлены здесь, и надеюсь, что это работает для всех случаев.

    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;
}
3
ответ дан 28 November 2019 в 02:29
поделиться
Другие вопросы по тегам:

Похожие вопросы: