Java 8 DateTimeFormatters常量在哪里定义? [英] Where are the Java 8 DateTimeFormatters constants defined?

查看:325
本文介绍了Java 8 DateTimeFormatters常量在哪里定义?的处理方法,对大家解决问题具有一定的参考价值,需要的朋友们下面随着小编来一起学习吧!

问题描述

我正在查看 DateTimeFormatter 类,我想知道常量在哪里MEEE定义了YY等。更具体地说,在 ChronoField TextStyle ,它应该返回 DateTimeFormatter 字符串片段,例如(ChronoField.MONTH_OF_YEAR,TextStyle.SHORT)应映射到字符串MMM

I am looking at the DateTimeFormatter class and I was wondering where are the constants like "M", "EEE" and "YY" etc are defined. More specifically there should be code like this somewhere given a ChronoField and TextStyle, it should return the DateTimeFormatter string snippet e.g. (ChronoField.MONTH_OF_YEAR, TextStyle.SHORT) should map to the string "MMM"

推荐答案

经过一些挖掘,我发现这些是在私有静态最终地图,名为 FIELD_MAP ,它是 DateTimeFormatBuilder 类:

After some source digging, I found out that these are pre-defined in a private static final Map, called FIELD_MAP, which is a member of the DateTimeFormatBuilder class:

 /** Map of letters to fields. */
private static final Map<Character, TemporalField> FIELD_MAP = new HashMap<>();
static {
    // SDF = SimpleDateFormat
    FIELD_MAP.put('G', ChronoField.ERA);                       // SDF, LDML (different to both for 1/2 chars)
    FIELD_MAP.put('y', ChronoField.YEAR_OF_ERA);               // SDF, LDML
    FIELD_MAP.put('u', ChronoField.YEAR);                      // LDML (different in SDF)
    FIELD_MAP.put('Q', IsoFields.QUARTER_OF_YEAR);             // LDML (removed quarter from 310)
    FIELD_MAP.put('q', IsoFields.QUARTER_OF_YEAR);             // LDML (stand-alone)
    FIELD_MAP.put('M', ChronoField.MONTH_OF_YEAR);             // SDF, LDML
    FIELD_MAP.put('L', ChronoField.MONTH_OF_YEAR);             // SDF, LDML (stand-alone)
    FIELD_MAP.put('D', ChronoField.DAY_OF_YEAR);               // SDF, LDML
    FIELD_MAP.put('d', ChronoField.DAY_OF_MONTH);              // SDF, LDML
    FIELD_MAP.put('F', ChronoField.ALIGNED_DAY_OF_WEEK_IN_MONTH);  // SDF, LDML
    FIELD_MAP.put('E', ChronoField.DAY_OF_WEEK);               // SDF, LDML (different to both for 1/2 chars)
    FIELD_MAP.put('c', ChronoField.DAY_OF_WEEK);               // LDML (stand-alone)
    FIELD_MAP.put('e', ChronoField.DAY_OF_WEEK);               // LDML (needs localized week number)
    FIELD_MAP.put('a', ChronoField.AMPM_OF_DAY);               // SDF, LDML
    FIELD_MAP.put('H', ChronoField.HOUR_OF_DAY);               // SDF, LDML
    FIELD_MAP.put('k', ChronoField.CLOCK_HOUR_OF_DAY);         // SDF, LDML
    FIELD_MAP.put('K', ChronoField.HOUR_OF_AMPM);              // SDF, LDML
    FIELD_MAP.put('h', ChronoField.CLOCK_HOUR_OF_AMPM);        // SDF, LDML
    FIELD_MAP.put('m', ChronoField.MINUTE_OF_HOUR);            // SDF, LDML
    FIELD_MAP.put('s', ChronoField.SECOND_OF_MINUTE);          // SDF, LDML
    FIELD_MAP.put('S', ChronoField.NANO_OF_SECOND);            // LDML (SDF uses milli-of-second number)
    FIELD_MAP.put('A', ChronoField.MILLI_OF_DAY);              // LDML
    FIELD_MAP.put('n', ChronoField.NANO_OF_SECOND);            // 310 (proposed for LDML)
    FIELD_MAP.put('N', ChronoField.NANO_OF_DAY);               // 310 (proposed for LDML)
}

这篇关于Java 8 DateTimeFormatters常量在哪里定义?的文章就介绍到这了,希望我们推荐的答案对大家有所帮助,也希望大家多多支持IT屋!

查看全文
登录 关闭
扫码关注1秒登录
发送“验证码”获取 | 15天全站免登陆