3

LocalDateFormatter 是否有格式模式来显示当月日期的基数以及其他值?

例如,我希望打印 2016 年 11 月 1 日或 2017 年 2 月 27 日。

在此先感谢,卢卡斯

4

2 回答 2

5

您可以DateTimeFormatterBuilder使用

public DateTimeFormatterBuilder appendText(TemporalField field, Map<Long, String> textLookup)

采用Map用于查找字段值的方法。就像是:

static final Map<Long, String> ORDINAL_DAYS = new HashMap<>();
static
{
  ORDINAL_DAYS.put(1, "First");
  ORDINAL_DAYS.put(2, "Second");
  ... values for month days 1 .. 31
  ORDINAL_DAYS.put(31, "Thirty-first");
}


DateTimeFormatter formatter = new DateTimeFormatterBuilder()
    .appendText(ChronoField.YEAR)
    .appendLiteral(' ')
    .appendText(ChronoField.MONTH_OF_YEAR)
    .appendLiteral(' ')
    .appendText(ChronoField.DAY_OF_MONTH, ORDINAL_DAYS)
    .toFormatter();

String formattedDate = formatter.format(date);
于 2017-02-27T13:38:07.997 回答
1

正如 M. Prokhorov 已经说过的,这不是内置的。如果您只需要英语语言环境,它应该不会太难,但是:

private static final String[] dayNumberNames = { null, "first", "second",
        "third", // etc.
    };

public static String formatMyWay(LocalDate date) {
    String month = date.getMonth().toString();
    month = month.substring(0, 1) + month.substring(1).toLowerCase(Locale.ENGLISH);
    return "" + date.getYear() + ' ' + month + ' ' + dayNumberNames[date.getDayOfMonth()];
}

这会给你类似的东西

2017 February twenty-seventh

根据您的口味抛光。

数组的初始null元素是为了弥补数组索引从 0 开始而天数从 1 开始这一事实。

于 2017-02-27T13:22:23.133 回答