LocalDateFormatter每月基数

时间:2017-02-27 12:37:40

标签: java java-8 date-formatting localdate

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

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

提前致谢, 卢卡斯

2 个答案:

答案 0 :(得分: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); 用于查找字段的值。类似的东西:

find

答案 1 :(得分:1)

正如普罗霍罗夫先生所说,这不是内置的。如果你只需要它用于英语语言环境,那么它应该不会太难:

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开始的事实。