特别是使用 DateUtils,我如何格式化没有年份的数字日期

Specifically using DateUtils, how do I format a numeric date with no year

我想将日期字符串格式化为没有年份(例如:“1/4”)。

int flags = DateUtils.FORMAT_NUMERIC_DATE | DateUtils.FORMAT_NO_YEAR;

以上标志仍然在日期后附加一年(例如:“1/4/2016”)。如何删除年份?

这很适合我

 int flags =  DateUtils.FORMAT_NUMERIC_DATE | DateUtils.FORMAT_NO_YEAR;
 String s = DateUtils.formatDateTime(this, System.currentTimeMillis(), flags);

尝试使用 SimpleDateFormat。像这样:

Date date = new Date();
SimpleDateFormat df = new SimpleDateFormat("MM/dd");
String dateString = df.format(date);

日期格式似乎在 4.4 Android 版本之后发生了变化:

对于 4.1 Android 版本 DateUtils.formatDateTime goes up to DateUtils.formatDateRange,其中字符串使用 Formatter 进行格式化。

但是从 4.​​4 Android 版本 DateUtils.formatDateRange 使用 libcore.icu.DateIntervalFormat 来格式化字符串。

public static Formatter formatDateRange(Context context, Formatter formatter, long startMillis,
                                        long endMillis, int flags, String timeZone) {
    // If we're being asked to format a time without being explicitly told whether to use
    // the 12- or 24-hour clock, icu4c will fall back to the locale's preferred 12/24 format,
    // but we want to fall back to the user's preference.
    if ((flags & (FORMAT_SHOW_TIME | FORMAT_12HOUR | FORMAT_24HOUR)) == FORMAT_SHOW_TIME) {
        flags |= DateFormat.is24HourFormat(context) ? FORMAT_24HOUR : FORMAT_12HOUR;
    }

    String range = DateIntervalFormat.formatDateRange(startMillis, endMillis, flags, timeZone);
    try {
        formatter.out().append(range);
    } catch (IOException impossible) {
        throw new AssertionError(impossible);
    }
    return formatter;
}

因此您必须 trim 生成字符串或使用 DateFormat/SimpleDateFormat 删除 4.1 上的年份字段 Android。