java - Java 8 DateTimeFormatters 常量在哪里定义?

标签 java java-8 datetime-format java-time

我正在查看 DateTimeFormatter类,我想知道在哪里定义了 "M""EEE""YY" 等常量。更具体地说,在给定 ChronoField 的地方应该有这样的代码和 TextStyle ,它应该返回 DateTimeFormatter 字符串片段,例如(ChronoField.MONTH_OF_YEAR, TextStyle.SHORT) 应映射到字符串 "MMM"

最佳答案

经过一些源代码挖掘,我发现这些是在private static final Map 中预定义的,称为FIELD_MAP,它是DateTimeFormatBuilder 的成员。类:

 /** 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 - Java 8 DateTimeFormatters 常量在哪里定义?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/28947664/

相关文章:

c# - 替换字符串正则表达式中的日期

java - HttpServletRequest InputStream 损坏了吗?

scala - 在 macOS Sierra 上使用 Nix 安装 Scala

css - 在 JavaFx TreeTableView 上应用 CSS 失败

ruby-on-rails - 格式化 JSON API 的 Active Record 时间戳

ruby-on-rails - Ical 更改了我在制作 .ics 文件时输入的时间

java - 在 Java 中存储数据库密码(在 JDBC 连接字符串中需要)的最佳方法是什么?

java - 有没有办法将 DatagramSocket 绑定(bind)到特定网卡上的任何端口,或者如果我指定网卡,我必须指定端口?

java - AspectJ "around"和 "proceed"与 "before/after"

java - 是否有用于 collections.addAll 的 java 8 语法来处理空参数?