模块  java.base
软件包  java.time.format

Class DateTimeFormatterBuilder


  • public final class DateTimeFormatterBuilder
    extends Object
    生成器以创建日期时间格式化程序。

    这允许创建DateTimeFormatter 最终使用此构建器创建所有日期时间格式化程序。

    日期时间的基本要素都可以添加:

    • 值 - 数值
    • 分数 - 包含小数位的小数值。 在输出分数时始终使用此选项以确保正确分析分数
    • 文本 - 值的文本等效项
    • OffsetId / Offset - zone offset
    • ZoneId - time-zone id
    • ZoneText - 时区的名称
    • ChronologyId - chronology id
    • ChronologyText - 年表的名称
    • 文字 - 文字文字
    • 嵌套和可选 - 格式可以嵌套或可选
    此外,任何元素都可以通过填充来装饰,或者使用空格或任何其他字符。

    最后,可以使用大部分与java.text.SimpleDateFormat SimpleDateFormat兼容的速记模式,参见appendPattern(String) 实际上,这只是解析模式并调用构建器上的其他方法。

    实现要求:
    此类是一个可变构建器,旨在从单个线程使用。
    从以下版本开始:
    1.8
    • 构造方法详细信息

      • DateTimeFormatterBuilder

        public DateTimeFormatterBuilder()
        构造构建器的新实例。
    • 方法详细信息

      • getLocalizedDateTimePattern

        public static String getLocalizedDateTimePattern​(FormatStyle dateStyle,
                                                         FormatStyle timeStyle,
                                                         Chronology chrono,
                                                         Locale locale)
        获取区域设置和年表的日期和时间样式的格式设置模式。 语言环境和年表用于查找所请求的dateStyle和/或timeStyle的语言环境特定格式。

        如果语言环境包含“rg”(区域覆盖) Unicode extensions ,则格式化模式将覆盖适合该区域的格式。

        参数
        dateStyle - 日期的FormatStyle,null表示仅限时间的模式
        timeStyle - 时间的FormatStyle,null表示仅限日期的模式
        chrono - 年表,非空
        locale - 区域设置,非null
        结果
        区域设置和按时间顺序排列的特定格式模式
        异常
        IllegalArgumentException - 如果dateStyle和timeStyle都为null
      • parseCaseSensitive

        public DateTimeFormatterBuilder parseCaseSensitive()
        将解析样式更改为格式化程序的其余部分区分大小写。

        解析可以区分大小写或不区分大小写 - 默认情况下区分大小写。 此方法允许更改解析的区分大小写设置。

        调用此方法会更改构建器的状态,以便所有后续构建器方法调用将在区分大小写模式下解析文本。 有关相反的设置,请参见parseCaseInsensitive() 可以在构建器中的任何点调用解析区分大小写/不敏感方法,因此解析器可以在解析期间多次在大小写解析模式之间交换。

        由于默认值区分大小写,因此只应在先前调用#parseCaseInsensitive之后使用此方法。

        结果
        这个,对于链接,不是空的
      • parseCaseInsensitive

        public DateTimeFormatterBuilder parseCaseInsensitive()
        将解析样式更改为格式化程序的其余部分不区分大小写。

        解析可以区分大小写或不区分大小写 - 默认情况下区分大小写。 此方法允许更改解析的区分大小写设置。

        调用此方法会更改构建器的状态,以便所有后续构建器方法调用将在不区分大小写的模式下解析文本。 有关相反的设置,请参见parseCaseSensitive() 可以在构建器中的任何点调用解析区分大小写/不敏感方法,因此解析器可以在解析期间多次在大小写解析模式之间交换。

        结果
        这个,对于链接,不是空的
      • parseStrict

        public DateTimeFormatterBuilder parseStrict()
        将解析样式更改为格式化程序的其余部分是严格的。

        解析可以是严格的或宽松的 - 默认情况下严格。 这可以控制匹配文本和符号样式的灵活程度。

        使用时,此方法从此时开始将解析更改为严格。 由于strict是默认值,因此通常只在调用parseLenient()后才需要。 更改将一直有效,直到最终构造的格式化程序结束或直到parseLenient

        结果
        这个,对于链接,不是空的
      • parseLenient

        public DateTimeFormatterBuilder parseLenient()
        将解析样式更改为格式化程序的其余部分是宽松的。 请注意,区分大小写与此方法分开设置。

        解析可以是严格的或宽松的 - 默认情况下严格。 这可以控制匹配文本和符号样式的灵活程度。 调用此方法的应用程序通常也应调用parseCaseInsensitive()

        使用时,此方法从此时开始将解析更改为宽松。 更改将一直有效,直到最终构造的格式化程序结束或直到parseStrict

        结果
        这个,对于链接,不是空的
      • parseDefaulting

        public DateTimeFormatterBuilder parseDefaulting​(TemporalField field,
                                                        long value)
        将字段的默认值附加到格式化程序以用于解析。

        这会向构建器附加一条指令,以将默认值注入已解析的结果中。 这与格式化程序的可选部分结合使用时尤其有用。

        例如,考虑一个解析年份的格式化程序,后跟一个可选的月份,以及另一个可选的日期。 使用这样的格式化程序将需要调用代码来检查是否已解析完整日期,年月或仅一年。 此方法可用于将月份和日期默认为合理的值,例如本月的第一个,允许调用代码始终获取日期。

        格式化期间,此方法无效。

        在解析期间,检查解析的当前状态。 如果指定的字段没有关联值,因为在该点尚未成功解析,则将指定的值注入解析结果。 注入是立即的,因此字段值对将对格式化程序中的任何后续元素可见。 因此,通常在构建器的末尾调用此方法。

        参数
        字段 - 默认值为的字段,不为null
        value - 默认字段的值
        结果
        这个,对于链接,不是空的
      • appendValue

        public DateTimeFormatterBuilder appendValue​(TemporalField field)
        使用正常输出样式将日期时间字段的值附加到格式化程序。

        在格式期间将输出字段的值。 如果无法获得该值,则会抛出异常。

        将按照整数值的正常格式打印该值。 只会签署负数。 不会添加填充。

        像这样的可变宽度值的解析器通常表现得很贪婪,需要一个数字,但接受尽可能多的数字。 “相邻值解析”可能会影响此行为。 有关详细信息,请参阅appendValue(java.time.temporal.TemporalField, int)

        参数
        字段 - 要追加的字段,而不是null
        结果
        这个,对于链接,不是空的
      • appendValue

        public DateTimeFormatterBuilder appendValue​(TemporalField field,
                                                    int width)
        使用固定宽度,零填充方法将日期时间字段的值附加到格式化程序。

        在格式期间将输出字段的值。 如果无法获得该值,则会抛出异常。

        该值将在左侧填零。 如果值的大小意味着它无法在宽度内打印,则抛出异常。 如果字段的值为负,则在格式化期间抛出异常。

        此方法支持一种称为“相邻值解析”的特殊解析技术。 该技术解决了值,可变或固定宽度后跟一个或多个固定长度值的问题。 标准解析器是贪婪的,因此它通常会窃取遵循可变宽度1的固定宽度值解析器所需的数字。

        无需任何操作即可启动“相邻值解析”。 当调用appendValue ,构建器进入相邻值解析设置模式。 如果紧接着的后续方法调用或对同一构建器的调用是针对固定宽度值,则解析器将保留空间,以便可以解析固定宽度值。

        例如,考虑builder.appendValue(YEAR).appendValue(MONTH_OF_YEAR, 2);年份是1到19位数之间的可变宽度分析。 月份是2位数的固定宽度分析。 因为这些是紧接着相同地附加到同一个构建器,所以年份解析器将保留该月份的两个数字进行解析。 因此,文本'201106'将正确解析为2011年和6月。如果没有相邻的值解析,年份将贪婪地解析所有六位数字并且不为该月留下任何内容。

        相邻值解析适用于解析器中的每组固定宽度非负值,其紧跟任何类型的值,可变或固定宽度。 调用任何其他append方法将结束相邻值解析的设置。 因此,在appendValue下您需要避免相邻值解析行为,只需将appendValue添加到另一个DateTimeFormatterBuilder并将其添加到此构建器。

        如果相邻解析处于活动状态,则解析必须严格匹配严格和宽松模式中指定的位数。 此外,不允许使用正号或负号。

        参数
        字段 - 要追加的字段,而不是null
        width - 打印字段的宽度,从1到19
        结果
        这个,对于链接,不是空的
        异常
        IllegalArgumentException - 如果宽度无效
      • appendValue

        public DateTimeFormatterBuilder appendValue​(TemporalField field,
                                                    int minWidth,
                                                    int maxWidth,
                                                    SignStyle signStyle)
        将日期时间字段的值附加到格式化程序,以提供对格式的完全控制。

        在格式期间将输出字段的值。 如果无法获得该值,则会抛出异常。

        此方法提供对数字格式的完全控制,包括零填充和正/负符号。

        像这样的可变宽度值的解析器通常表现得很贪婪,接受尽可能多的数字。 “相邻值解析”可能会影响此行为。 有关详细信息,请参阅appendValue(java.time.temporal.TemporalField, int)

        在严格解析模式下,最小解析位数为minWidth ,最大值为maxWidth 在宽松解析模式中,解析数字的最小数量为1,最大值为19(除了受相邻值解析限制)。

        如果使用相等的最小和最大宽度以及符号样式NOT_NEGATIVE调用此方法,则它将委托给appendValue(TemporalField,int) 在这种情况下,会出现那里描述的格式和解析行为。

        参数
        字段 - 要追加的字段,而不是null
        minWidth - 打印字段的最小字段宽度,从1到19
        maxWidth - 打印字段的最大字段宽度,从1到19
        signStyle - 正/负输出样式,不为null
        结果
        这个,对于链接,不是空的
        异常
        IllegalArgumentException - 如果宽度无效
      • appendValueReduced

        public DateTimeFormatterBuilder appendValueReduced​(TemporalField field,
                                                           int width,
                                                           int maxWidth,
                                                           int baseValue)
        将日期时间字段的缩减值附加到格式化程序。

        由于年份等字段因年代而异,因此建议在大多数情况下使用此方法的appendValueReduced(TemporalField, int, int, ChronoLocalDate) date}变体。 此变体适用于简单字段或仅使用ISO年表。

        对于格式化, widthmaxWidth用于确定要格式化的字符数。 如果它们相等则格式是固定宽度。 如果该字段的值在使用width字符的baseValue的范围内,则缩小的值将被格式化,否则该值将被截断以适合maxWidth 输出最右边的字符以匹配宽度,左边填充为零。

        对于严格解析,将解析widthmaxWidth允许的字符数。 对于宽松解析,字符数必须至少为1且小于10.如果解析的位数等于width且值为正,则字段的值计算为大于或等于的第一个数字具有相同最低有效字符的baseValue ,否则解析的值是字段值。 这允许为baseValue和width范围内的值输入减小的值,并且可以为范围外的值输入绝对值。

        例如,基值1980和宽度2有效值范围为19802079 在解析期间,文本"12"将得到值2012因为这是最后两个字符为“12”的范围内的值。 相比之下,解析文本"1915"将导致值1915

        参数
        字段 - 要追加的字段,而不是null
        width - 打印和解析字段的字段宽度,从1到10
        maxWidth - 打印字段的最大字段宽度,从1到10
        baseValue - 有效值范围的基值
        结果
        这个,对于链接,不是空的
        异常
        IllegalArgumentException - 如果宽度或基值无效
      • appendValueReduced

        public DateTimeFormatterBuilder appendValueReduced​(TemporalField field,
                                                           int width,
                                                           int maxWidth,
                                                           ChronoLocalDate baseDate)
        将日期时间字段的缩减值附加到格式化程序。

        这通常用于格式化和解析两位数的年份。

        基准日期用于在解析期间计算完整值。 例如,如果基准日期是1950-01-01,那么两位数年份解析的解析值将在1950-01-01到2049-12-31的范围内。 只有年份将从日期中提取,因此1950-08-25的基准日期也将解析到1950-01-01至2049-12-31的范围。 此行为对于支持诸如基于周的年份或其他日历系统等字段是必要的,其中解析的值与标准ISO年份不一致。

        确切的行为如下。 解析整个字段集,并使用最后一个年表确定有效年表,如果它出现不止一次。 然后将基准日期转换为有效的年表。 然后从特定年表的基准日期中提取指定的字段,并使用它来确定下面使用的baseValue

        对于格式化, widthmaxWidth用于确定要格式化的字符数。 如果它们相等则格式是固定宽度。 如果该字段的值在使用width字符的baseValue范围内,则缩小的值将被格式化,否则该值将被截断以适合maxWidth 输出最右边的字符以匹配宽度,左边填充为零。

        对于严格解析,将解析widthmaxWidth允许的字符数。 对于宽松解析,字符数必须至少为1且小于10.如果解析的位数等于width且值为正,则字段的值计算为大于或等于的第一个数字到具有相同最低有效字符的baseValue ,否则解析的值是字段值。 这允许为baseValue和width范围内的值输入减小的值,并且可以为范围外的值输入绝对值。

        例如,基值1980和宽度2有效值为19802079 在解析期间,文本"12"将得到值2012因为这是最后两个字符为“12”的范围内的值。 相比之下,解析文本"1915"将导致值1915

        参数
        字段 - 要追加的字段,而不是null
        width - 打印和解析字段的字段宽度,从1到10
        maxWidth - 打印字段的最大字段宽度,从1到10
        baseDate - 用于计算已解析时间序列中有效值范围的基值的基准日期,不为null
        结果
        这个,对于链接,不是空的
        异常
        IllegalArgumentException - 如果宽度或基值无效
      • appendFraction

        public DateTimeFormatterBuilder appendFraction​(TemporalField field,
                                                       int minWidth,
                                                       int maxWidth,
                                                       boolean decimalPoint)
        将日期时间字段的小数值追加到格式化程序。

        将输出该字段的小数值,包括前一个小数点。 不输出前面的值。 例如,秒的第二个值15将输出为.25

        可以控制印刷部分的宽度。 将最小宽度设置为零将导致不生成输出。 打印的分数将具有最小和最大宽度之间所需的最小宽度 - 省略尾随零。 由于最大宽度,不会发生舍入 - 简单地删除数字。

        在严格模式下解析时,解析数字的数量必须介于最小和最大宽度之间。 在严格模式下,如果最小和最大宽度相等且没有小数点,则解析器将参与相邻值解析,请参阅appendValue(java.time.temporal.TemporalField,int) 在宽松模式下解析时,最小宽度被认为是零,最大宽度被认为是9。

        如果无法获得该值,则会抛出异常。 如果值为负,则抛出异常。 如果该字段没有固定的有效值集,则会抛出异常。 如果要打印的日期时间中的字段值无效,则无法打印,并且将引发异常。

        参数
        字段 - 要追加的字段,而不是null
        minWidth - 不包括小数点的字段的最小宽度,从0到9
        maxWidth - 不包括小数点的字段的最大宽度,从1到9
        decimalPoint - 是否输出本地化的小数点符号
        结果
        这个,对于链接,不是空的
        异常
        IllegalArgumentException - 如果字段具有一组有效值的变量或宽度无效
      • appendText

        public DateTimeFormatterBuilder appendText​(TemporalField field)
        使用全文样式将日期时间字段的文本附加到格式化程序。

        该字段的文本将在格式期间输出。 该值必须在字段的有效范围内。 如果无法获得该值,则会抛出异常。 如果该字段没有文本表示,则将使用数值。

        将按照整数值的正常格式打印该值。 只会签署负数。 不会添加填充。

        参数
        字段 - 要追加的字段,不为空
        结果
        这个,对于链接,不是空的
      • appendText

        public DateTimeFormatterBuilder appendText​(TemporalField field,
                                                   TextStyle textStyle)
        将日期时间字段的文本附加到格式化程序。

        该字段的文本将在格式期间输出。 该值必须在字段的有效范围内。 如果无法获得该值,则会抛出异常。 如果该字段没有文本表示,则将使用数值。

        将按照整数值的正常格式打印该值。 只会签署负数。 不会添加填充。

        参数
        字段 - 要追加的字段,而不是null
        textStyle - 要使用的文本样式,不为null
        结果
        这个,对于链接,不是空的
      • appendText

        public DateTimeFormatterBuilder appendText​(TemporalField field,
                                                   Map<Long,​String> textLookup)
        使用指定的映射将日期时间字段的文本附加到格式化程序以提供文本。

        标准文本输出方法使用JDK中的本地化文本。 此方法允许直接指定文本。 构建器未验证提供的映射以确保可以进行格式化或解析,因此无效映射可能会在以后使用时引发错误。

        提供文本映射在格式化和解析方面提供了相当大的灵活性。 例如,遗留应用程序可能需要或提供一年中的月份为“JNY”,“FBY”,“MCH”等。这些与本地化月份名称的标准文本集不匹配。 使用此方法,可以创建一个映射,定义每个值和文本之间的连接:

          Map<Long, String> map = new HashMap<>();
         map.put(1L, "JNY");
         map.put(2L, "FBY");
         map.put(3L, "MCH");
         ...
         builder.appendText(MONTH_OF_YEAR, map); 

        其他用途可能是输出带后缀的值,例如“1st”,“2nd”,“3rd”或罗马数字“I”,“II”,“III”,“IV”。

        格式化期间,将获取该值并检查它是否在有效范围内。 如果文本不可用于该值,则将其输出为数字。 在解析期间,解析器将匹配文本和数值的映射。

        参数
        字段 - 要追加的字段,不为空
        textLookup - 从值到文本的映射
        结果
        这个,对于链接,不是空的
      • appendInstant

        public DateTimeFormatterBuilder appendInstant()
        使用ISO-8601即时添加到格式化程序,格式化三位一组的小数位数。

        实例具有固定的输出格式。 它们将转换为带有UTC区域偏移的日期时间,并使用标准ISO-8601格式进行格式化。 使用此方法,格式化纳秒可根据需要输出零,三,六或九位数。 未使用本地化的十进制样式。

        使用INSTANT_SECONDS和任选的NANO_OF_SECOND获得该瞬间。 INSTANT_SECONDS的值可能超出最大范围LocalDateTime

        resolver style对即时解析没有影响。 '24:00'的结束时间在第二天开始时的午夜处理。 '23:59:59'的闰秒时间在某种程度上得到了处理,详见DateTimeFormatter.parsedLeapSecond()

        此方法的替代方法是将瞬时格式化/解析为单个epoch-seconds值。 这是使用appendValue(INSTANT_SECONDS)实现的。

        结果
        这个,对于链接,不是空的
      • appendInstant

        public DateTimeFormatterBuilder appendInstant​(int fractionalDigits)
        使用ISO-8601即时添加到格式化程序,控制小数位数。

        实例具有固定的输出格式,尽管此方法提供对小数位的一些控制。 它们将转换为带有UTC区域偏移的日期时间,并使用标准ISO-8601格式打印。 未使用本地化的十进制样式。

        fractionalDigits参数允许控制小数秒的输出。 指定零将导致不输出小数位。 从1到9将输出越来越多的数字,必要时使用零右边填充。 特殊值-1用于输出必要的数字以避免任何尾随零。

        在严格模式下解析时,已解析数字的数量必须与小数位数相匹配。 在宽松模式下解析时,接受从0到9的任意数量的小数位。

        使用INSTANT_SECONDS和任选的NANO_OF_SECOND获得该瞬间。 INSTANT_SECONDS的值可能超出最大范围LocalDateTime

        resolver style对即时解析没有影响。 '24:00'的结束时间在第二天开始时的午夜处理。 '23:59:60'的闰秒时间在某种程度上得到了处理,详情请参见DateTimeFormatter.parsedLeapSecond()

        此方法的替代方法是将瞬时格式化/解析为单个epoch-seconds值。 这是使用appendValue(INSTANT_SECONDS)实现的。

        参数
        fractionalDigits - 要格式化的小数秒位数,从0到9或-1,以根据需要使用尽可能多的位数
        结果
        这个,对于链接,不是空的
        异常
        IllegalArgumentException - 如果小数位数无效
      • appendOffsetId

        public DateTimeFormatterBuilder appendOffsetId()
        将区域偏移量(例如“+01:00”)附加到格式化程序。

        这会附加一条指令,以便将偏移ID格式化/解析为构建器。 这相当于致电appendOffset("+HH:mm:ss", "Z") 有关格式化和解析的详细信息,请参见appendOffset(String, String)

        结果
        这个,对于链接,不是空的
      • appendOffset

        public DateTimeFormatterBuilder appendOffset​(String pattern,
                                                     String noOffsetText)
        将区域偏移量(例如“+01:00”)附加到格式化程序。

        这会附加一条指令,以便将偏移ID格式化/解析为构建器。

        在格式化期间,使用等效于使用TemporalQueries.offset()查询时间的机制来获得偏移量。 它将使用下面定义的格式打印。 如果无法获得偏移量,则抛出异常,除非格式化程序的部分是可选的。

        在严格模式下解析时,输入必须包含由指定模式定义的必需元素和可选元素。 如果无法解析偏移量,则抛出异常,除非格式化程序的部分是可选的。

        在宽松模式下解析时,只需要小时数 - 分钟和秒是可选的。 如果指定的模式包含冒号,则需要冒号。 如果指定的模式是“+ HH”,则冒号的存在取决于小时数字后面的字符是否为冒号。 如果无法解析偏移量,则抛出异常,除非格式化程序的部分是可选的。

        偏移的格式由模式控制,模式必须是以下之一:

        • +HH - 仅限小时,忽略分钟和秒钟
        • +HHmm - 小时,如果非零则为分钟,忽略秒,无冒号
        • +HH:mm - 小时,如果非零,则为分钟,忽略第二个,带冒号
        • +HHMM - 小时和分钟,忽略秒,没有冒号
        • +HH:MM - 小时和分钟,忽略秒,冒号
        • +HHMMss - 小时和分钟,第二个如果非零,则没有冒号
        • +HH:MM:ss - 小时和分钟,第二个如果非零,则使用冒号
        • +HHMMSS - 小时,分钟和秒,没有结肠
        • +HH:MM:SS - 小时,分钟和秒,冒号
        • +HHmmss - 小时,如果非零或分钟则为分钟,如果非零则为秒,无冒号
        • +HH:mm:ss - 小时,如果非零或分钟则为分钟,如果为非零则为秒,则为冒号
        • +H - 仅限小时,忽略分钟和秒钟
        • +Hmm - 小时,如果非零则为分钟,忽略秒,无冒号
        • +H:mm - 小时,如果非零则为分钟,忽略第二个,带冒号
        • +HMM - 小时和分钟,忽略秒,没有冒号
        • +H:MM - 小时和分钟,忽略第二,结肠
        • +HMMss - 小时和分钟,第二个如果非零,则没有冒号
        • +H:MM:ss - 小时和分钟,第二个如果非零,则使用冒号
        • +HMMSS - 小时,分钟和秒,没有结肠
        • +H:MM:SS - 小时,分钟和秒,带冒号
        • +Hmmss - 小时,如果非零或分钟则为分钟,如果非零则为秒,不存在冒号
        • +H:mm:ss - 小时,如果非零或分钟则为分钟,如果非零则为秒,则为冒号
        包含“HH”的模式将格式化并解析两位数小时,必要时填零。 包含“H”的模式将格式化,没有零填充,并解析一个或两个数字。 在宽松模式下,解析器将是贪婪的并解析可能的最大数字。 “无偏移”文本控制当要输出的偏移字段的总量为零时打印的文本。 示例值将为“Z”,“+ 00:00”,“UTC”或“GMT”。 解析UTC时接受三种格式 - “无偏移”文本,以及由模式定义的零加号和减号版本。
        参数
        pattern - 要使用的模式,而不是null
        noOffsetText - 偏移量为零时使用的文本,不为null
        结果
        这个,对于链接,不是空的
        异常
        IllegalArgumentException - 如果模式无效
      • appendLocalizedOffset

        public DateTimeFormatterBuilder appendLocalizedOffset​(TextStyle style)
        将本地化区域偏移量(例如“GMT + 01:00”)附加到格式化程序。

        这会将本地化区域偏移附加到构建器,本地化偏移的格式由此方法的指定style控制:

        • full - 具有本地化偏移文本的格式,例如'GMT,2位小时和分钟字段,可选的第二个字段(如果非零)和冒号。
        • short - 具有本地化偏移文本的格式,例如'GMT,不带前导零的小时,可选的2位数分钟和非零的秒和冒号。

        在格式化期间,使用等效于使用TemporalQueries.offset()查询时间的机制来获得偏移量。 如果无法获得偏移量,则抛出异常,除非格式化程序的部分是可选的。

        在解析期间,使用上面定义的格式解析偏移量。 如果无法解析偏移量,则抛出异常,除非格式化程序的部分是可选的。

        参数
        style - 要使用的格式样式,不为null
        结果
        这个,对于链接,不是空的
        异常
        IllegalArgumentException - 如果样式既不是 full也不是 short
      • appendZoneId

        public DateTimeFormatterBuilder appendZoneId()
        将时区ID(例如“Europe / Paris”或“+02:00”)附加到格式化程序。

        这会附加一条指令,将区域ID格式化/解析为构建器。 区域ID以严格的方式获得,适用于ZonedDateTime 相比之下, OffsetDateTime没有适合与此方法一起使用的区域ID,请参阅appendZoneOrOffsetId()

        在格式化期间,使用等效于使用TemporalQueries.zoneId()查询时间的机制来获取区域。 它将使用ZoneId.getId()的结果打印 如果无法获取区域,则抛出异常,除非格式化程序的部分是可选的。

        在解析期间,文本必须与已知区域或偏移匹配。 有两种类型的区域ID,基于偏移,例如'+01:30'和基于区域的,例如'Europe / London'。 它们的解析方式不同。 如果解析以“+”,“ - ”,“UT”,“UTC”或“GMT”开头,则解析器需要基于偏移的区域,并且不匹配基于区域的区域。 偏移ID(例如“+02:30”)可以在解析的开头,或者以“UT”,“UTC”或“GMT”作为前缀。 偏移ID解析等效于使用参数'HH:MM:ss'和无偏移字符串'0'使用appendOffset(String, String) 如果解析以“UT”,“UTC”或“GMT”开头,并且解析器无法匹配后续偏移ID,则选择ZoneOffset.UTC 在所有其他情况下,已知的基于区域的区域列表用于查找最长的可用匹配。 如果未找到匹配项,并且解析以“Z”开头,则选择ZoneOffset.UTC 解析器使用case sensitive设置。

        例如,以下将解析:

          "Europe/London"           -- ZoneId.of("Europe/London")
           "Z"                       -- ZoneOffset.UTC
           "UT"                      -- ZoneId.of("UT")
           "UTC"                     -- ZoneId.of("UTC")
           "GMT"                     -- ZoneId.of("GMT")
           "+01:30"                  -- ZoneOffset.of("+01:30")
           "UT+01:30"                -- ZoneOffset.of("+01:30")
           "UTC+01:30"               -- ZoneOffset.of("+01:30")
           "GMT+01:30"               -- ZoneOffset.of("+01:30") 
        结果
        这个,对于链接,不是空的
        另请参见:
        appendZoneRegionId()
      • appendZoneRegionId

        public DateTimeFormatterBuilder appendZoneRegionId()
        将时区区域ID(例如“Europe / Paris”)附加到格式化程序,拒绝区域ID(如果它是ZoneOffset

        仅当它是基于区域的ID时,它才会附加指令以将区域ID格式化/解析为构建器。

        在格式化期间,使用等效于使用TemporalQueries.zoneId()查询时间的机制来获取区域。 如果区域是ZoneOffset或无法获取,则抛出异常,除非格式化程序的部分是可选的。 如果区域不是偏移,则将使用区域ID ZoneId.getId()打印区域。

        在解析期间,文本必须与已知区域或偏移匹配。 有两种类型的区域ID,基于偏移,例如'+01:30'和基于区域的,例如'Europe / London'。 它们的解析方式不同。 如果解析以“+”,“ - ”,“UT”,“UTC”或“GMT”开头,则解析器需要基于偏移的区域,并且不匹配基于区域的区域。 偏移ID(例如“+02:30”)可以在解析的开头,或者以“UT”,“UTC”或“GMT”作为前缀。 偏移ID解析等效于使用参数'HH:MM:ss'和无偏移字符串'0'使用appendOffset(String, String) 如果解析以“UT”,“UTC”或“GMT”开头,并且解析器无法匹配后续偏移ID,则选择ZoneOffset.UTC 在所有其他情况下,已知的基于区域的区域列表用于查找最长的可用匹配。 如果未找到匹配项,并且解析以“Z”开头,则选择ZoneOffset.UTC 解析器使用case sensitive设置。

        例如,以下将解析:

          "Europe/London"           -- ZoneId.of("Europe/London")
           "Z"                       -- ZoneOffset.UTC
           "UT"                      -- ZoneId.of("UT")
           "UTC"                     -- ZoneId.of("UTC")
           "GMT"                     -- ZoneId.of("GMT")
           "+01:30"                  -- ZoneOffset.of("+01:30")
           "UT+01:30"                -- ZoneOffset.of("+01:30")
           "UTC+01:30"               -- ZoneOffset.of("+01:30")
           "GMT+01:30"               -- ZoneOffset.of("+01:30") 

        请注意,除了用于获取区域的机制外,此方法与appendZoneId()相同。 另请注意,解析接受偏移,而格式化永远不会产生一个。

        结果
        这个,对于链接,不是空的
        另请参见:
        appendZoneId()
      • appendZoneOrOffsetId

        public DateTimeFormatterBuilder appendZoneOrOffsetId()
        使用最佳可用区域ID将时区ID(例如“Europe / Paris”或“+02:00”)附加到格式化程序。

        这会附加一条指令,以便为构建器格式化/解析最佳可用区域或偏移ID。 区域ID以宽松的方式获得,首先尝试查找真正的区域ID,例如ZonedDateTime上的区域ID,然后尝试查找偏移量,例如OffsetDateTime上的偏移量。

        在格式化期间,使用等效于使用TemporalQueries.zone()查询时间的机制来获取区域。 它将使用ZoneId.getId()的结果打印 如果无法获取区域,则抛出异常,除非格式化程序的部分是可选的。

        在解析期间,文本必须与已知区域或偏移匹配。 有两种类型的区域ID,基于偏移,例如'+01:30'和基于区域的,例如'Europe / London'。 它们的解析方式不同。 如果解析以“+”,“ - ”,“UT”,“UTC”或“GMT”开头,则解析器需要基于偏移的区域,并且不匹配基于区域的区域。 偏移ID(例如“+02:30”)可以在解析的开头,或者以“UT”,“UTC”或“GMT”作为前缀。 偏移ID解析等效于使用参数'HH:MM:ss'和无偏移字符串'0'使用appendOffset(String, String) 如果解析以“UT”,“UTC”或“GMT”开头,并且解析器无法匹配后续偏移ID,则选择ZoneOffset.UTC 在所有其他情况下,已知的基于区域的区域列表用于查找最长的可用匹配。 如果未找到匹配项,并且解析以“Z”开头,则选择ZoneOffset.UTC 解析器使用case sensitive设置。

        例如,以下将解析:

          "Europe/London"           -- ZoneId.of("Europe/London")
           "Z"                       -- ZoneOffset.UTC
           "UT"                      -- ZoneId.of("UT")
           "UTC"                     -- ZoneId.of("UTC")
           "GMT"                     -- ZoneId.of("GMT")
           "+01:30"                  -- ZoneOffset.of("+01:30")
           "UT+01:30"                -- ZoneOffset.of("UT+01:30")
           "UTC+01:30"               -- ZoneOffset.of("UTC+01:30")
           "GMT+01:30"               -- ZoneOffset.of("GMT+01:30") 

        请注意,除了用于获取区域的机制外,此方法与appendZoneId()相同。

        结果
        这个,对于链接,不是空的
        另请参见:
        appendZoneId()
      • appendZoneText

        public DateTimeFormatterBuilder appendZoneText​(TextStyle textStyle)
        将时区名称(例如“英国夏令时”)添加到格式化程序。

        这会附加一条指令,以便将区域的文本名称格式化/解析为构建器。

        在格式化期间,使用等效于使用TemporalQueries.zoneId()查询时间的机制来获取区域。 如果区域是ZoneOffset ,将使用ZoneOffset.getId()的结果打印 如果区域不是偏移量,则将查找文本名称以查找DateTimeFormatter设置的区域设置。 如果正在打印的时间对象表示瞬间,或者如果它是不在夏令时间隙或重叠中的本地日期时间,那么该文本将是适当的夏季或冬季时间文本。 如果查找文本未找到任何合适的结果,则将打印ID 如果无法获取区域,则抛出异常,除非格式化程序的部分是可选的。

        在解析期间,接受文本区域名称,区域ID或偏移量。 许多文本区域名称不是唯一的,例如CST可以用于“中央标准时间”和“中国标准时间”。 在这种情况下,区域ID将由格式化程序locale的区域信息和该区域的标准区域ID确定,例如,America Eastern区域的America / New_York。 在这种情况下, appendZoneText(TextStyle, Set)可用于指定一组首选ZoneId

        参数
        textStyle - 要使用的文本样式,不为null
        结果
        这个,对于链接,不是空的
      • appendZoneText

        public DateTimeFormatterBuilder appendZoneText​(TextStyle textStyle,
                                                       Set<ZoneId> preferredZones)
        将时区名称(例如“英国夏令时”)添加到格式化程序。

        这会附加一条指令,以便将区域的文本名称格式化/解析为构建器。

        在格式化期间,使用等效于使用TemporalQueries.zoneId()查询时间的机制来获取区域。 如果区域是ZoneOffset ,将使用ZoneOffset.getId()的结果打印 如果区域不是偏移量,则将查找文本名称以查找DateTimeFormatter设置的区域设置。 如果正在打印的临时对象表示瞬间,或者如果它是不在夏令时间隙或重叠的本地日期时间,则该文本将适当地作为夏季或冬季时间文本。 如果查找文本没有找到任何合适的结果,则将打印ID 如果无法获取区域,则抛出异常,除非格式化程序的部分是可选的。

        在解析期间,接受文本区域名称,区域ID或偏移量。 许多文本区域名称不是唯一的,例如CST可以用于“中央标准时间”和“中国标准时间”。 在这种情况下,区域ID将由格式化程序locale的区域信息和该区域的标准区域ID确定,例如,America Eastern区域的America / New_York。 此方法还允许指定一组首选的ZoneId用于解析。 如果要解析的纹理区域名称不唯一,则将使用匹配的首选区域ID。

        如果无法解析区域,则抛出异常,除非格式化程序的部分是可选的。

        参数
        textStyle - 要使用的文本样式,不为null
        preferredZones - 首选区域ID的集合,不为null
        结果
        这个,对于链接,不是空的
      • appendGenericZoneText

        public DateTimeFormatterBuilder appendGenericZoneText​(TextStyle textStyle)
        将通用时区名称(例如“太平洋时间”)附加到格式化程序。

        这会附加一条指令,以便将区域的通用文本名称格式化/解析为构建器。 通用名称在整个一年中都是相同的,忽略了任何夏令时更改。 例如,“太平洋时间”是通用名称,而“太平洋标准时间”和“太平洋夏令时”是具体名称,请参阅appendZoneText(TextStyle)

        在格式化期间,使用等效于使用TemporalQueries.zoneId()查询时间的机制来获取区域。 如果区域是ZoneOffset ,将使用ZoneOffset.getId()的结果打印 如果区域不是偏移量,则将查找文本名称以查找DateTimeFormatter设置的区域设置。 如果查找文本没有找到任何合适的结果,则将打印ID 如果无法获取区域,则抛出异常,除非格式化程序的部分是可选的。

        在解析期间,接受文本区域名称,区域ID或偏移量。 许多文本区域名称不是唯一的,例如CST可以用于“中央标准时间”和“中国标准时间”。 在这种情况下,区域ID将由格式化程序locale的区域信息和该区域的标准区域ID确定,例如,America Eastern区域的America / New_York。 在这种情况下, appendGenericZoneText(TextStyle, Set)可用于指定一组优选的ZoneId

        参数
        textStyle - 要使用的文本样式,不为null
        结果
        这个,对于链接,不是空的
        从以下版本开始:
        9
      • appendGenericZoneText

        public DateTimeFormatterBuilder appendGenericZoneText​(TextStyle textStyle,
                                                              Set<ZoneId> preferredZones)
        将通用时区名称(例如“太平洋时间”)附加到格式化程序。

        这会附加一条指令,以便将区域的通用文本名称格式化/解析为构建器。 通用名称在整个一年中都是相同的,忽略了任何夏令时更改。 例如,“太平洋时间”是通用名称,而“太平洋标准时间”和“太平洋夏令时”是具体名称,请参阅appendZoneText(TextStyle)

        此方法还允许指定一组首选的ZoneId进行解析。 如果要解析的纹理区域名称不唯一,则将使用匹配的首选区域ID。

        有关格式化和解析的详细信息,请参见appendGenericZoneText(TextStyle)

        参数
        textStyle - 要使用的文本样式,不为null
        preferredZones - 首选区域ID的集合,不为null
        结果
        这个,对于链接,不是空的
        从以下版本开始:
        9
      • appendChronologyId

        public DateTimeFormatterBuilder appendChronologyId()
        将年表ID(例如“ISO”或“ThaiBuddhist”)附加到格式化程序。

        这会附加一条指令,用于将年表ID格式化/解析为构建器。

        在格式化期间,使用等效于使用TemporalQueries.chronology()查询时间的机制获得时间顺序 它将使用Chronology.getId()的结果打印 如果无法获得年表,则抛出异常,除非格式化程序的部分是可选的。

        在解析期间,解析年表并且必须匹配Chronology.getAvailableChronologies()中的一个年表。 如果无法解析年表,则抛出异常,除非格式化程序的部分是可选的。 解析器使用case sensitive设置。

        结果
        这个,对于链接,不是空的
      • appendChronologyText

        public DateTimeFormatterBuilder appendChronologyText​(TextStyle textStyle)
        将年表名称附加到格式化程序。

        日历系统名称将在格式化期间输出。 如果无法获得年表,则会抛出异常。

        参数
        textStyle - 要使用的文本样式,不为null
        结果
        这个,对于链接,不是空的
      • appendLocalized

        public DateTimeFormatterBuilder appendLocalized​(FormatStyle dateStyle,
                                                        FormatStyle timeStyle)
        将本地化的日期时间模式附加到格式化程序。

        这会将本地化部分附加到构建器,适合输出日期,时间或日期时间组合。 本地化部分的格式基于四个项目懒洋洋地查找:

        • dateStyle指定给这个方法
        • timeStyle指定了此方法
        • LocaleDateTimeFormatter
        • Chronology ,选择最好的
        在格式化期间,时间顺序是从格式化的时态对象获得的,该时间对象可能已被DateTimeFormatter.withChronology(Chronology)覆盖。 FULLLONG样式通常需要时区。 当使用这些风格格式化,一ZoneId必须是可用的,无论是使用ZonedDateTimeDateTimeFormatter.withZone(java.time.ZoneId)

        在解析期间,如果已经解析了年表,则使用它。 否则使用默认值DateTimeFormatter.withChronology(Chronology) ,其中IsoChronology作为后备。

        请注意,此方法提供与DateFormat上的方法类似的功能,例如DateFormat.getDateTimeInstance(int, int)

        参数
        dateStyle - 要使用的日期样式,null表示不需要日期
        timeStyle - 使用的时间样式,null表示不需要时间
        结果
        这个,对于链接,不是空的
        异常
        IllegalArgumentException - 如果日期和时间样式均为空
      • appendLiteral

        public DateTimeFormatterBuilder appendLiteral​(char literal)
        将字符文字附加到格式化程序。

        在格式化过程中将输出此字符。

        参数
        literal - 要追加的文字,而不是null
        结果
        这个,对于链接,不是空的
      • appendLiteral

        public DateTimeFormatterBuilder appendLiteral​(String literal)
        将字符串文字附加到格式化程序。

        该字符串将在格式化期间输出。

        如果文字为空,则不会向格式化程序添加任何内容。

        参数
        literal - 要追加的文字,而不是null
        结果
        这个,对于链接,不是空的
      • append

        public DateTimeFormatterBuilder append​(DateTimeFormatter formatter)
        将格式化程序的所有元素追加到构建器。

        此方法与将格式化程序的每个组成部分直接附加到此构建器具有相同的效果。

        参数
        formatter - 要添加的格式化程序,而不是null
        结果
        这个,对于链接,不是空的
      • appendOptional

        public DateTimeFormatterBuilder appendOptional​(DateTimeFormatter formatter)
        将格式化程序附加到构建器,可以选择格式化/解析。

        此方法与将每个组成部分直接附加到由optionalStart()optionalEnd()包围的此构建器具有相同的效果。

        如果数据可用于其中包含的所有字段,格式化程序将格式化。 如果字符串匹配,格式化程序将解析,否则不返回错误。

        参数
        formatter - 要添加的格式化程序,而不是null
        结果
        这个,对于链接,不是空的
      • appendPattern

        public DateTimeFormatterBuilder appendPattern​(String pattern)
        将指定模式定义的元素追加到构建器。

        所有字母'A'到'Z'和'a'到'z'都保留为模式字母。 字符'#','{'和'}'保留供将来使用。 字符'['和']'表示可选模式。 定义了以下模式字母:

          Symbol  Meaning                     Presentation      Examples
          ------  -------                     ------------      -------
           G       era                         text              AD; Anno Domini; A
           u       year                        year              2004; 04
           y       year-of-era                 year              2004; 04
           D       day-of-year                 number            189
           M/L     month-of-year               number/text       7; 07; Jul; July; J
           d       day-of-month                number            10
           g       modified-julian-day         number            2451334
        
           Q/q     quarter-of-year             number/text       3; 03; Q3; 3rd quarter
           Y       week-based-year             year              1996; 96
           w       week-of-week-based-year     number            27
           W       week-of-month               number            4
           E       day-of-week                 text              Tue; Tuesday; T
           e/c     localized day-of-week       number/text       2; 02; Tue; Tuesday; T
           F       day-of-week-in-month        number            3
        
           a       am-pm-of-day                text              PM
           h       clock-hour-of-am-pm (1-12)  number            12
           K       hour-of-am-pm (0-11)        number            0
           k       clock-hour-of-day (1-24)    number            24
        
           H       hour-of-day (0-23)          number            0
           m       minute-of-hour              number            30
           s       second-of-minute            number            55
           S       fraction-of-second          fraction          978
           A       milli-of-day                number            1234
           n       nano-of-second              number            987654321
           N       nano-of-day                 number            1234000000
        
           V       time-zone ID                zone-id           America/Los_Angeles; Z; -08:30
           v       generic time-zone name      zone-name         PT, Pacific Time
           z       time-zone name              zone-name         Pacific Standard Time; PST
           O       localized zone-offset       offset-O          GMT+8; GMT+08:00; UTC-08:00;
           X       zone-offset 'Z' for zero    offset-X          Z; -08; -0830; -08:30; -083015; -08:30:15
           x       zone-offset                 offset-x          +0000; -08; -0830; -08:30; -083015; -08:30:15
           Z       zone-offset                 offset-Z          +0000; -0800; -08:00
        
           p       pad next                    pad modifier      1
        
           '       escape for text             delimiter
           ''      single quote                literal           '
           [       optional section start
           ]       optional section end
           #       reserved for future use
           {       reserved for future use
           }       reserved for future use 

        模式字母的数量决定了格式。 有关模式的以用户为中心的描述,请参见DateTimeFormatter 下表定义了模式字母如何映射到构建器。

        日期字段 :用于输出日期的模式字母。

          Pattern  Count  Equivalent builder methods
          -------  -----  --------------------------
            G       1      appendText(ChronoField.ERA, TextStyle.SHORT)
            GG      2      appendText(ChronoField.ERA, TextStyle.SHORT)
            GGG     3      appendText(ChronoField.ERA, TextStyle.SHORT)
            GGGG    4      appendText(ChronoField.ERA, TextStyle.FULL)
            GGGGG   5      appendText(ChronoField.ERA, TextStyle.NARROW)
        
            u       1      appendValue(ChronoField.YEAR, 1, 19, SignStyle.NORMAL)
            uu      2      appendValueReduced(ChronoField.YEAR, 2, 2000)
            uuu     3      appendValue(ChronoField.YEAR, 3, 19, SignStyle.NORMAL)
            u..u    4..n   appendValue(ChronoField.YEAR, n, 19, SignStyle.EXCEEDS_PAD)
            y       1      appendValue(ChronoField.YEAR_OF_ERA, 1, 19, SignStyle.NORMAL)
            yy      2      appendValueReduced(ChronoField.YEAR_OF_ERA, 2, 2000)
            yyy     3      appendValue(ChronoField.YEAR_OF_ERA, 3, 19, SignStyle.NORMAL)
            y..y    4..n   appendValue(ChronoField.YEAR_OF_ERA, n, 19, SignStyle.EXCEEDS_PAD)
            Y       1      append special localized WeekFields element for numeric week-based-year
            YY      2      append special localized WeekFields element for reduced numeric week-based-year 2 digits
            YYY     3      append special localized WeekFields element for numeric week-based-year (3, 19, SignStyle.NORMAL)
            Y..Y    4..n   append special localized WeekFields element for numeric week-based-year (n, 19, SignStyle.EXCEEDS_PAD)
        
            Q       1      appendValue(IsoFields.QUARTER_OF_YEAR)
            QQ      2      appendValue(IsoFields.QUARTER_OF_YEAR, 2)
            QQQ     3      appendText(IsoFields.QUARTER_OF_YEAR, TextStyle.SHORT)
            QQQQ    4      appendText(IsoFields.QUARTER_OF_YEAR, TextStyle.FULL)
            QQQQQ   5      appendText(IsoFields.QUARTER_OF_YEAR, TextStyle.NARROW)
            q       1      appendValue(IsoFields.QUARTER_OF_YEAR)
            qq      2      appendValue(IsoFields.QUARTER_OF_YEAR, 2)
            qqq     3      appendText(IsoFields.QUARTER_OF_YEAR, TextStyle.SHORT_STANDALONE)
            qqqq    4      appendText(IsoFields.QUARTER_OF_YEAR, TextStyle.FULL_STANDALONE)
            qqqqq   5      appendText(IsoFields.QUARTER_OF_YEAR, TextStyle.NARROW_STANDALONE)
        
            M       1      appendValue(ChronoField.MONTH_OF_YEAR)
            MM      2      appendValue(ChronoField.MONTH_OF_YEAR, 2)
            MMM     3      appendText(ChronoField.MONTH_OF_YEAR, TextStyle.SHORT)
            MMMM    4      appendText(ChronoField.MONTH_OF_YEAR, TextStyle.FULL)
            MMMMM   5      appendText(ChronoField.MONTH_OF_YEAR, TextStyle.NARROW)
            L       1      appendValue(ChronoField.MONTH_OF_YEAR)
            LL      2      appendValue(ChronoField.MONTH_OF_YEAR, 2)
            LLL     3      appendText(ChronoField.MONTH_OF_YEAR, TextStyle.SHORT_STANDALONE)
            LLLL    4      appendText(ChronoField.MONTH_OF_YEAR, TextStyle.FULL_STANDALONE)
            LLLLL   5      appendText(ChronoField.MONTH_OF_YEAR, TextStyle.NARROW_STANDALONE)
        
            w       1      append special localized WeekFields element for numeric week-of-year
            ww      2      append special localized WeekFields element for numeric week-of-year, zero-padded
            W       1      append special localized WeekFields element for numeric week-of-month
            d       1      appendValue(ChronoField.DAY_OF_MONTH)
            dd      2      appendValue(ChronoField.DAY_OF_MONTH, 2)
            D       1      appendValue(ChronoField.DAY_OF_YEAR)
            DD      2      appendValue(ChronoField.DAY_OF_YEAR, 2, 3, SignStyle.NOT_NEGATIVE)
            DDD     3      appendValue(ChronoField.DAY_OF_YEAR, 3)
            F       1      appendValue(ChronoField.ALIGNED_DAY_OF_WEEK_IN_MONTH)
            g..g    1..n   appendValue(JulianFields.MODIFIED_JULIAN_DAY, n, 19, SignStyle.NORMAL)
            E       1      appendText(ChronoField.DAY_OF_WEEK, TextStyle.SHORT)
            EE      2      appendText(ChronoField.DAY_OF_WEEK, TextStyle.SHORT)
            EEE     3      appendText(ChronoField.DAY_OF_WEEK, TextStyle.SHORT)
            EEEE    4      appendText(ChronoField.DAY_OF_WEEK, TextStyle.FULL)
            EEEEE   5      appendText(ChronoField.DAY_OF_WEEK, TextStyle.NARROW)
            e       1      append special localized WeekFields element for numeric day-of-week
            ee      2      append special localized WeekFields element for numeric day-of-week, zero-padded
            eee     3      appendText(ChronoField.DAY_OF_WEEK, TextStyle.SHORT)
            eeee    4      appendText(ChronoField.DAY_OF_WEEK, TextStyle.FULL)
            eeeee   5      appendText(ChronoField.DAY_OF_WEEK, TextStyle.NARROW)
            c       1      append special localized WeekFields element for numeric day-of-week
            ccc     3      appendText(ChronoField.DAY_OF_WEEK, TextStyle.SHORT_STANDALONE)
            cccc    4      appendText(ChronoField.DAY_OF_WEEK, TextStyle.FULL_STANDALONE)
            ccccc   5      appendText(ChronoField.DAY_OF_WEEK, TextStyle.NARROW_STANDALONE) 

        时间字段 :输出时间的模式字母。

          Pattern  Count  Equivalent builder methods
          -------  -----  --------------------------
            a       1      appendText(ChronoField.AMPM_OF_DAY, TextStyle.SHORT)
            h       1      appendValue(ChronoField.CLOCK_HOUR_OF_AMPM)
            hh      2      appendValue(ChronoField.CLOCK_HOUR_OF_AMPM, 2)
            H       1      appendValue(ChronoField.HOUR_OF_DAY)
            HH      2      appendValue(ChronoField.HOUR_OF_DAY, 2)
            k       1      appendValue(ChronoField.CLOCK_HOUR_OF_DAY)
            kk      2      appendValue(ChronoField.CLOCK_HOUR_OF_DAY, 2)
            K       1      appendValue(ChronoField.HOUR_OF_AMPM)
            KK      2      appendValue(ChronoField.HOUR_OF_AMPM, 2)
            m       1      appendValue(ChronoField.MINUTE_OF_HOUR)
            mm      2      appendValue(ChronoField.MINUTE_OF_HOUR, 2)
            s       1      appendValue(ChronoField.SECOND_OF_MINUTE)
            ss      2      appendValue(ChronoField.SECOND_OF_MINUTE, 2)
        
            S..S    1..n   appendFraction(ChronoField.NANO_OF_SECOND, n, n, false)
            A..A    1..n   appendValue(ChronoField.MILLI_OF_DAY, n, 19, SignStyle.NOT_NEGATIVE)
            n..n    1..n   appendValue(ChronoField.NANO_OF_SECOND, n, 19, SignStyle.NOT_NEGATIVE)
            N..N    1..n   appendValue(ChronoField.NANO_OF_DAY, n, 19, SignStyle.NOT_NEGATIVE) 

        区域ID :输出的模式字母ZoneId

          Pattern  Count  Equivalent builder methods
          -------  -----  --------------------------
            VV      2      appendZoneId()
            v       1      appendGenericZoneText(TextStyle.SHORT)
            vvvv    4      appendGenericZoneText(TextStyle.FULL)
            z       1      appendZoneText(TextStyle.SHORT)
            zz      2      appendZoneText(TextStyle.SHORT)
            zzz     3      appendZoneText(TextStyle.SHORT)
            zzzz    4      appendZoneText(TextStyle.FULL) 

        区域偏移 :输出图案字母ZoneOffset

          Pattern  Count  Equivalent builder methods
          -------  -----  --------------------------
            O       1      appendLocalizedOffset(TextStyle.SHORT)
            OOOO    4      appendLocalizedOffset(TextStyle.FULL)
            X       1      appendOffset("+HHmm","Z")
            XX      2      appendOffset("+HHMM","Z")
            XXX     3      appendOffset("+HH:MM","Z")
            XXXX    4      appendOffset("+HHMMss","Z")
            XXXXX   5      appendOffset("+HH:MM:ss","Z")
            x       1      appendOffset("+HHmm","+00")
            xx      2      appendOffset("+HHMM","+0000")
            xxx     3      appendOffset("+HH:MM","+00:00")
            xxxx    4      appendOffset("+HHMMss","+0000")
            xxxxx   5      appendOffset("+HH:MM:ss","+00:00")
            Z       1      appendOffset("+HHMM","+0000")
            ZZ      2      appendOffset("+HHMM","+0000")
            ZZZ     3      appendOffset("+HHMM","+0000")
            ZZZZ    4      appendLocalizedOffset(TextStyle.FULL)
            ZZZZZ   5      appendOffset("+HH:MM:ss","Z") 

        修饰符 :修改模式其余部分的模式字母:

          Pattern  Count  Equivalent builder methods
          -------  -----  --------------------------
            [       1      optionalStart()
            ]       1      optionalEnd()
            p..p    1..n   padNext(n) 

        上面未指定的任何字母序列,无法识别的字母或保留字符都将引发异常。 未来版本可能会添加到模式集。 建议在要直接输出的所有字符周围使用单引号,以确保将来的更改不会破坏您的应用程序。

        请注意,模式字符串与SimpleDateFormat类似,但不完全相同。 模式字符串也与Unicode公共区域设置数据存储库(CLDR / LDML)定义的模式字符串类似,但不完全相同。 模式字母'X'和'u'与Unicode CLDR / LDML对齐。 相比之下, SimpleDateFormat使用'u'表示星期几的数字。 模式字母'y'和'Y'分辨两位数和4位数以上的数字。 添加模式字母'n','A','N'和'p'。 数字类型将拒绝大数字。

        参数
        pattern - 要添加的模式,而不是null
        结果
        这个,对于链接,不是空的
        异常
        IllegalArgumentException - 如果模式无效
      • padNext

        public DateTimeFormatterBuilder padNext​(int padWidth)
        使用空格使下一个添加的打印机/解析器填充到固定宽度。

        此填充将使用空格填充到固定宽度。

        在格式化过程中,将输出装饰元素,然后填充到指定的宽度。 如果超出焊盘宽度,则在格式化期间将抛出异常。

        在解析期间,解析填充和装饰元素。 如果解析是宽松的,则将焊盘宽度视为最大值。 填充是贪婪地解析。 因此,如果装饰元素以pad字符开头,则不会对其进行解析。

        参数
        padWidth - 垫宽,1或更大
        结果
        这个,对于链接,不是空的
        异常
        IllegalArgumentException - 如果焊盘宽度太小
      • padNext

        public DateTimeFormatterBuilder padNext​(int padWidth,
                                                char padChar)
        使下一个添加的打印机/解析器填充到固定宽度。

        此填充用于填充除零填充之外的填充。 应使用appendValue方法实现零填充。

        在格式化过程中,将输出装饰元素,然后填充到指定的宽度。 如果超出焊盘宽度,则在格式化期间将抛出异常。

        在解析期间,解析填充和装饰元素。 如果解析是宽松的,则将焊盘宽度视为最大值。 如果解析不区分大小写,则匹配pad字符忽略大小写。 填充是贪婪地解析。 因此,如果装饰元素以pad字符开头,则不会对其进行解析。

        参数
        padWidth - 焊盘宽度,1或更大
        padChar - 填充字符
        结果
        这个,对于链接,不是空的
        异常
        IllegalArgumentException - 如果焊盘宽度太小
      • optionalStart

        public DateTimeFormatterBuilder optionalStart()
        标记可选部分的开头。

        格式的输出可以包括可选的部分,这些部分可以嵌套。 通过调用此方法启动可选节,并通过调用optionalEnd()或结束构建过程结束。

        可选部分中的所有元素都被视为可选元素。 在格式化期间,仅当TemporalAccessor中的数据可用于该部分中的所有元素时,才会输出该部分。 在解析期间,解析的字符串中可能缺少整个部分。

        例如,将构建器设置视为builder.appendValue(HOUR_OF_DAY,2).optionalStart().appendValue(MINUTE_OF_HOUR,2) 可选部分在构建器的末尾自动结束。 格式化期间,只有在可以从日期时间获取其值时才会输出分钟。 在解析期间,无论分钟是否存在,都将成功解析输入。

        结果
        这个,对于链接,不是空的
      • optionalEnd

        public DateTimeFormatterBuilder optionalEnd()
        结束可选部分。

        格式的输出可以包括可选的部分,这些部分可以嵌套。 通过调用optionalStart()启动可选部分,并使用此方法(或在构建器的末尾)结束。

        在没有先前调用optionalStart情况下调用此方法将引发异常。 调用optionalStart后立即调用此方法对格式化程序没有影响,除了结束(空)可选部分。

        可选部分中的所有元素都被视为可选元素。 在格式化期间,只有当TemporalAccessor中的数据可用于该部分中的所有元素时,才会输出该部分。 在解析期间,解析的字符串中可能缺少整个部分。

        例如,将构建器设置视为builder.appendValue(HOUR_OF_DAY,2).optionalStart().appendValue(MINUTE_OF_HOUR,2).optionalEnd() 格式化期间,只有在可以从日期时间获取其值时才会输出分钟。 在解析期间,无论分钟是否存在,都将成功解析输入。

        结果
        这个,对于链接,不是空的
        异常
        IllegalStateException - 如果之前没有呼叫 optionalStart
      • toFormatter

        public DateTimeFormatter toFormatter()
        通过使用默认语言环境创建DateTimeFormatter来完成此构建器。

        这将创建一个default FORMAT locale的格式化程序。 将使用标准DecimalStyle打印和解析数字。 解析器样式将是SMART

        调用此方法将在创建格式化程序之前重复调用optionalEnd()来结束任何打开的可选部分。

        如果需要,仍可在创建格式化程序后使用此构建器,尽管可能已通过调用optionalEnd更改了状态。

        结果
        创建的格式化程序,不是null
      • toFormatter

        public DateTimeFormatter toFormatter​(Locale locale)
        通过使用指定的语言环境创建DateTimeFormatter来完成此构建器。

        这将创建具有指定区域设置的格式化程序。 将使用标准DecimalStyle打印和解析数字。 解析器样式将是SMART

        在创建格式化程序之前,通过重复调用optionalEnd() ,调用此方法将结束任何打开的可选部分。

        如果需要,仍可在创建格式化程序后使用此构建器,尽管可能已通过调用optionalEnd更改了状态。

        参数
        locale - 用于格式化的语言环境,而不是null
        结果
        the created formatter, not null