模块 java.base

类 DateTimeFormatterBuilder

java.lang.Object
java.time.format.DateTimeFormatterBuilder

public final class DateTimeFormatterBuilder extends Object
创建日期时间格式化程序的构建器。

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

date-time的基本元素都可以加上:

  • 值 - 数值
  • 分数 - 包括小数位的分数值。输出分数时始终使用它以确保正确解析分数
  • 文本 - 值的文本等价物
  • OffsetId/Offset - 区域偏移
  • ZoneId - 时区 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)
      获取区域设置和年表的日期和时间样式的格式设置模式。 locale 和 chronology 用于查找请求的 dateStyle 和/或 timeStyle 的特定于locale的格式。

      如果locale包含“rg”(区域覆盖)Unicode 扩展,则格式化模式将被适合该区域的模式覆盖。

      参数:
      dateStyle - 日期的 FormatStyle,对于仅时间模式为 null
      timeStyle - 时间的 FormatStyle,对于仅日期模式为 null
      chrono - 年表,非空
      locale - locale,非空
      返回:
      locale和年表特定的格式模式
      抛出:
      IllegalArgumentException - 如果 dateStyle 和 timeStyle 都为 null
    • getLocalizedDateTimePattern

      public static String  getLocalizedDateTimePattern(String  requestedTemplate, Chronology  chrono, Locale  locale)
      返回区域设置和年表所请求模板的格式化模式。locale和年表用于查找所请求模板的locale特定格式。

      如果locale包含“rg”(区域覆盖)Unicode 扩展,则格式化模式将被适合该区域的模式覆盖。

      有关 requestedTemplate 参数的详细信息,请参阅 appendLocalized(String)

      参数:
      requestedTemplate - 请求的模板,不为空
      chrono - 年表,非空
      locale - locale,非空
      返回:
      locale和年表特定的格式模式
      抛出:
      IllegalArgumentException - 如果 requestedTemplateappendLocalized(String) 中描述的正则表达式语法不匹配。
      DateTimeException - 如果 requestedTemplate 的本地化模式匹配不可用
      自从:
      19
      参见:
    • 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)
      将字段的默认值附加到格式化程序以用于解析。

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

      例如,考虑一个解析年份的格式化程序,后面跟着一个可选的月份,还有一个进一步的可选日期。使用这样的格式化程序需要调用代码检查是否解析了完整的日期、年月或仅一年。此方法可用于将月份和日期默认为一个合理的值,例如该月的第一天,从而允许调用代码始终获取日期。

      在格式化过程中,该方法无效。

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

      参数:
      field - 默认值的字段,不为空
      value - 字段默认值
      返回:
      这个,用于链接,不为空
    • appendValue

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

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

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

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

      参数:
      field - 要追加的字段,不为空
      返回:
      这个,用于链接,不为空
    • appendValue

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

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

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

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

      不需要任何操作来启动“相邻值解析”。当调用 appendValue 时,构建器进入相邻值解析设置模式。如果紧随其后的方法调用或对同一构建器的调用是针对固定宽度值的,那么解析器将保留空间以便可以解析固定宽度值。

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

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

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

      参数:
      field - 要追加的字段,不为空
      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)。在这种情况下,会发生那里描述的格式化和解析行为。

      参数:
      field - 要追加的字段,不为空
      minWidth - 打印字段的最小字段宽度,从 1 到 19
      maxWidth - 打印字段的最大字段宽度,从 1 到 19
      signStyle - 正/负输出样式,不为空
      返回:
      这个,用于链接,不为空
      抛出:
      IllegalArgumentException - 如果宽度无效
    • appendValueReduced

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

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

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

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

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

      参数:
      field - 要追加的字段,不为空
      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 用于确定要格式化的字符数。如果它们相等,则格式为固定宽度。如果该字段的值在 baseValue 范围内,使用 width 字符,则对减少的值进行格式化,否则该值将被截断以适合 maxWidth。输出最右边的字符以匹配宽度,左边用零填充。

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

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

      参数:
      field - 要追加的字段,不为空
      width - 打印和解析字段的字段宽度,从 1 到 10
      maxWidth - 打印字段的最大字段宽度,从 1 到 10
      baseDate - 用于计算已解析年表中有效值范围的基准值的基准日期,不为空
      返回:
      这个,用于链接,不为空
      抛出:
      IllegalArgumentException - 如果宽度或基值无效
    • appendFraction

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

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

      可以控制打印分数的宽度。将最小宽度设置为零将导致不生成任何输出。打印的分数将具有最小和最大宽度之间所需的最小宽度 - 尾随零被省略。由于最大宽度,不会发生舍入 - 数字只是被丢弃。

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

      如果无法获取该值,则会抛出异常。如果值为负,将抛出异常。如果该字段没有一组固定的有效值,则会抛出异常。如果要打印的日期时间中的字段值超出有效值范围,则会抛出异常。

      参数:
      field - 要追加的字段,不为空
      minWidth - 不包括小数点的字段的最小宽度,从 0 到 9
      maxWidth - 不包括小数点的字段的最大宽度,从 1 到 9
      decimalPoint - 是否输出局部小数点符号
      返回:
      这个,用于链接,不为空
      抛出:
      IllegalArgumentException - 如果该字段具有一组可变的有效值或宽度无效
    • appendText

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

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

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

      参数:
      field - 要追加的字段,不为空
      返回:
      这个,用于链接,不为空
    • appendText

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

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

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

      参数:
      field - 要追加的字段,不为空
      textStyle - 要使用的文本样式,不为空
      返回:
      这个,用于链接,不为空
    • appendText

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

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

      提供文本映射在格式化和解析方面提供了相当大的灵活性。例如,遗留应用程序可能需要或提供一年中的月份为“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”。

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

      参数:
      field - 要追加的字段,不为空
      textLookup - 从值到文本的映射
      返回:
      这个,用于链接,不为空
    • appendInstant

      public DateTimeFormatterBuilder  appendInstant()
      使用 ISO-8601 将一个 instant 附加到格式化程序,以三个为一组格式化小数位。

      Instants 有固定的输出格式。它们被转换为具有 UTC 时区偏移的日期时间,并使用标准 ISO-8601 格式进行格式化。使用这种方法,根据需要格式化纳秒输出零、三、六或九位数字。不使用本地化的十进制样式。

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

      解析器样式 对即时解析没有影响。 '24:00' 的结束时间作为次日开始的午夜处理。 '23:59:59' 的闰秒时间在某种程度上得到了处理,请参阅 DateTimeFormatter.parsedLeapSecond() 以获取完整详细信息。

      格式化时,时刻将始终以“Z”为后缀以指示 UTC。解析时,appendOffsetId() 的行为将用于解析偏移量,必要时将即时转换为 UTC。

      此方法的替代方法是将瞬间格式化/解析为单个纪元秒值。这是使用 appendValue(INSTANT_SECONDS) 实现的。

      返回:
      这个,用于链接,不为空
    • appendInstant

      public DateTimeFormatterBuilder  appendInstant(int fractionalDigits)
      使用 ISO-8601 将一个瞬间附加到格式化程序,并控制小数位数。

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

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

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

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

      解析器样式 对即时解析没有影响。 '24:00' 的结束时间作为次日开始的午夜处理。 '23:59:60' 的闰秒时间在某种程度上得到处理,请参阅 DateTimeFormatter.parsedLeapSecond() 以获取完整详细信息。

      此方法的替代方法是将瞬间格式化/解析为单个纪元秒值。这是使用 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 - 要使用的模式,不为空
      noOffsetText - 偏移量为零时使用的文本,不为空
      返回:
      这个,用于链接,不为空
      抛出:
      IllegalArgumentException - 如果模式无效
    • appendLocalizedOffset

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

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

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

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

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

      参数:
      style - 要使用的格式样式,不为空
      返回:
      这个,用于链接,不为空
      抛出:
      IllegalArgumentException - 如果样式既不是 full 也不是 short
    • appendZoneId

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

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

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

      在解析期间,文本必须匹配已知区域或偏移量。区域 ID 有两种类型,一种是基于偏移量的,例如“+01:30”,另一种是基于区域的,例如“欧洲/伦敦”。这些被不同地解析。如果解析以“+”、“-”、“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。解析器使用 区分大小写 设置。

      例如,以下将解析:

        "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

      public DateTimeFormatterBuilder  appendZoneRegionId()
      将时区区域 ID(例如“欧洲/巴黎”)附加到格式化程序,如果它是 ZoneOffset 则拒绝时区 ID。

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

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

      在解析期间,文本必须匹配已知区域或偏移量。区域 ID 有两种类型,一种是基于偏移量的,例如“+01:30”,另一种是基于区域的,例如“欧洲/伦敦”。这些被不同地解析。如果解析以“+”、“-”、“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。解析器使用 区分大小写 设置。

      例如,以下将解析:

        "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() 相同,除了用于获取区域的机制。另请注意,解析接受偏移量,而格式化永远不会产生偏移量。

      返回:
      这个,用于链接,不为空
      参见:
    • appendZoneOrOffsetId

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

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

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

      在解析期间,文本必须匹配已知区域或偏移量。区域 ID 有两种类型,一种是基于偏移量的,例如“+01:30”,另一种是基于区域的,例如“欧洲/伦敦”。这些被不同地解析。如果解析以“+”、“-”、“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。解析器使用 区分大小写 设置。

      例如,以下将解析:

        "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() 相同,除了用于获取区域的机制。

      返回:
      这个,用于链接,不为空
      参见:
    • appendZoneText

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

      这会附加一条指令来格式化/解析区域的文本名称到构建器。

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

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

      参数:
      textStyle - 要使用的文本样式,不为空
      返回:
      这个,用于链接,不为空
    • appendZoneText

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

      这会附加一条指令来格式化/解析区域的文本名称到构建器。

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

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

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

      参数:
      textStyle - 要使用的文本样式,不为空
      preferredZones - 首选区域 ID 集,不为空
      返回:
      这个,用于链接,不为空
    • appendGenericZoneText

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

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

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

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

      参数:
      textStyle - 要使用的文本样式,不为空
      返回:
      这个,用于链接,不为空
      自从:
      9
    • appendGenericZoneText

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

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

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

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

      参数:
      textStyle - 要使用的文本样式,不为空
      preferredZones - 首选区域 ID 集,不为空
      返回:
      这个,用于链接,不为空
      自从:
      9
    • appendChronologyId

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

      这会附加一条指令来格式化/解析构建器的年表 ID。

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

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

      返回:
      这个,用于链接,不为空
    • appendChronologyText

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

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

      参数:
      textStyle - 要使用的文本样式,不为空
      返回:
      这个,用于链接,不为空
    • appendLocalized

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

      这会将本地化部分附加到构建器,适用于输出日期、时间或日期-时间组合。本地化部分的格式是根据四个项目延迟查找的:

      • 指定给这个方法的dateStyle
      • 指定给这个方法的timeStyle
      • DateTimeFormatterLocale
      • 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 - 如果日期和时间样式都为空
    • appendLocalized

      public DateTimeFormatterBuilder  appendLocalized(String  requestedTemplate)
      使用请求的模板将本地化模式附加到格式化程序。

      这会将本地化部分附加到构建器,适用于输出日期、时间或日期-时间组合。本地化部分的格式是根据三个项目延迟查找的:

      • 指定给这个方法的requestedTemplate
      • DateTimeFormatterLocale
      • DateTimeFormatterChronology 除非被覆盖
      在格式化期间,年表是从正在格式化的时间对象中获得的,它可能已被 DateTimeFormatter.withChronology(Chronology) 覆盖。

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

      请求的模板是一系列典型的模式符号,按照日期或时间单位从大到小的规范顺序排列,可以用以下正则表达式表示:

         "G{0,5}" +    // Era
         "y*" +      // Year
         "Q{0,5}" +    // Quarter
         "M{0,5}" +    // Month
         "w*" +      // Week of Week Based Year
         "E{0,5}" +    // Day of Week
         "d{0,2}" +    // Day of Month
         "B{0,5}" +    // Period/AmPm of Day
         "[hHjC]{0,2}" +  // Hour of Day/AmPm (refer to LDML for 'j' and 'C')
         "m{0,2}" +    // Minute of Hour
         "s{0,2}" +    // Second of Minute
         "[vz]{0,4}"    // Zone
       
      所有模式符号都是可选的,每个模式符号代表一个字段,例如'M'代表月份字段。模式符号字母的数量遵循与格式化和解析模式部分中相同的表示,例如“数字”或“文本”。所请求模板中的其他模式符号无效。

      请求的模板到最接近的可用本地化格式的映射由 Unicode LDML 规范 定义。例如,从请求的模板 yMMM 创建的格式化程序会将 US locale 中的日期“2020-06-16”格式化为“2020 年 6 月”。

      参数:
      requestedTemplate - 要使用的请求模板,不为空
      返回:
      这个,用于链接,不为空
      抛出:
      IllegalArgumentException - 如果 requestedTemplate 无效
      自从:
      19
      参见:
    • appendLiteral

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

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

      参数:
      literal - 要追加的文字,不为空
      返回:
      这个,用于链接,不为空
    • appendLiteral

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

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

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

      参数:
      literal - 要追加的文字,不为空
      返回:
      这个,用于链接,不为空
    • appendDayPeriodText

      public DateTimeFormatterBuilder  appendDayPeriodText(TextStyle  style)
      将日期间文本附加到格式化程序。

      这会向构建器附加一条指令,以格式化/解析日期段的文本名称。日期间在 LDML 的 “白天” 元素中定义。

      在格式化期间,天期间是从 HOUR_OF_DAY 获得的,如果存在,则可选地从 MINUTE_OF_HOUR 获得。它将映射到 LDML 中定义的日期类型,例如“morning1”,然后将其翻译成文本。映射到日期类型及其翻译都取决于格式化程序中的locale。

      解析时,文本会先被解析成日期类型。然后将解析的日期段与其他字段组合,在解析阶段生成一个LocalTime。如果 HOUR_OF_AMPM 字段存在,则它与天期间组合以生成 HOUR_OF_DAY 并考虑任何 MINUTE_OF_HOUR 值。如果 HOUR_OF_DAY 存在,则根据天期间进行验证,同时考虑任何 MINUTE_OF_HOUR 值。如果在没有 HOUR_OF_DAYMINUTE_OF_HOURSECOND_OF_MINUTENANO_OF_SECOND 的情况下存在一天时段,则将一天时段的中点设置为 SMARTLENIENT 模式下的时间。例如,如果解析的日期时间段类型是“night1”并且在格式化程序locale中为其定义的时间段是从 21:00 到 06:00,那么它会导致 LocalTime 为 01:30。如果解决的时间与白天时间冲突,DateTimeException 将以 STRICTSMART 模式抛出。在 LENIENT 模式下,不抛出任何异常,并忽略解析的天数。

      “午夜”类型允许“00:00”作为一天的开始和“24:00”作为一天的结束,只要它们对解析的小时字段有效。

      参数:
      style - 要使用的文本样式,不为空
      返回:
      这个,用于链接,不为空
      自从:
      16
    • append

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

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

      参数:
      formatter - 要添加的格式化程序,不为空
      返回:
      这个,用于链接,不为空
    • appendOptional

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

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

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

      参数:
      formatter - 要添加的格式化程序,不为空
      返回:
      这个,用于链接,不为空
    • 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
        B    period-of-day        text       in the morning
        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, 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, 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_WEEK_OF_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)
       

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

       Pattern Count Equivalent builder methods
       ------- ----- --------------------------
        B    1   appendDayPeriodText(TextStyle.SHORT)
        BBBB  4   appendDayPeriodText(TextStyle.FULL)
        BBBBB  5   appendDayPeriodText(TextStyle.NARROW)
       

      区域编号: 模式字母输出 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 Common Locale Data Repository (CLDR/LDML) 定义的模式字符串相似,但不完全相同。模式字母“X”和“u”与 Unicode CLDR/LDML 对齐。相比之下,SimpleDateFormat 使用“u”表示星期几。模式字母“y”和“Y”以不同方式解析两位数和超过 4 位数字的年份。添加了模式字母“n”、“A”、“N”和“p”。数字类型将拒绝大数字。

      参数:
      pattern - 要添加的模式,不为空
      返回:
      这个,用于链接,不为空
      抛出:
      IllegalArgumentException - 如果模式无效
    • padNext

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

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

      格式化时,装饰元素会被输出,然后填充到指定的宽度。如果超过 pad 宽度,格式化过程中会抛出异常。

      在解析期间,填充和装饰元素被解析。如果解析宽松,则填充宽度被视为最大值。填充被贪婪地解析。因此,如果装饰元素以 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()
      通过使用默认locale创建 DateTimeFormatter 来完成此构建器。

      这将创建一个带有 默认格式locale 的格式化程序。数字将使用标准的 DecimalStyle 打印和解析。解析器样式将为 SMART

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

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

      返回:
      创建的格式化程序,不为空
    • toFormatter

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

      这将创建一个具有指定locale的格式化程序。数字将使用标准的 DecimalStyle 打印和解析。解析器样式将为 SMART

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

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

      参数:
      locale - 用于格式化的locale,不为空
      返回:
      创建的格式化程序,不为空