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

Class DateTimeFormatter


  • public final class DateTimeFormatter
    extends Object
    用于打印和解析日期时间对象的格式化程序。

    此类提供打印和解析的主要应用程序入口点,并提供DateTimeFormatter常见实现:

    • 使用预定义常量,例如ISO_LOCAL_DATE
    • 使用模式字母,例如uuuu-MMM-dd
    • 使用本地化样式,例如longmedium

    更复杂的格式化器由DateTimeFormatterBuilder提供。

    主日期时间类提供两种方法 - 一种用于格式化, format(DateTimeFormatter formatter) ,一种用于解析, parse(CharSequence text, DateTimeFormatter formatter)

    例如:

      LocalDate date = LocalDate.now();
      String text = date.format(formatter);
      LocalDate parsedDate = LocalDate.parse(text, formatter);
     

    除格式外,还可以使用所需的Locale,Chronology,ZoneId和DecimalStyle创建格式化程序。

    withLocale方法返回一个覆盖语言环境的新格式化程序。 语言环境影响格式化和解析的某些方面。 例如, ofLocalizedDate提供了使用特定于语言环境的日期格式的格式化程序。

    withChronology方法返回一个覆盖年表的新格式化程序。 如果被覆盖,则在格式化之前将日期时间值转换为年表。 在解析期间,日期时间值将在返回之前转换为年表。

    withZone方法返回一个覆盖该区域的新格式化程序。 如果被覆盖,则在格式化之前将日期时间值转换为带有请求的ZoneId的ZonedDateTime。 在解析期间,在返回值之前应用ZoneId。

    withDecimalStyle方法返回一个覆盖DecimalStyle的新格式化程序。 DecimalStyle符号用于格式化和解析。

    某些应用程序可能需要使用较旧的java.text.Format类进行格式化。 toFormat()方法返回的实现java.text.Format

    预定义的格式化程序

    Predefined Formatters Formatter Description Example ofLocalizedDate(dateStyle) Formatter with date style from the locale '2011-12-03' ofLocalizedTime(timeStyle) Formatter with time style from the locale '10:15:30' ofLocalizedDateTime(dateTimeStyle) Formatter with a style for date and time from the locale '3 Jun 2008 11:05:30' ofLocalizedDateTime(dateStyle,timeStyle) Formatter with date and time styles from the locale '3 Jun 2008 11:05' BASIC_ISO_DATE Basic ISO date '20111203' ISO_LOCAL_DATE ISO Local Date '2011-12-03' ISO_OFFSET_DATE ISO Date with offset '2011-12-03+01:00' ISO_DATE ISO Date with or without offset '2011-12-03+01:00'; '2011-12-03' ISO_LOCAL_TIME Time without offset '10:15:30' ISO_OFFSET_TIME Time with offset '10:15:30+01:00' ISO_TIME Time with or without offset '10:15:30+01:00'; '10:15:30' ISO_LOCAL_DATE_TIME ISO Local Date and Time '2011-12-03T10:15:30' ISO_OFFSET_DATE_TIME Date Time with Offset '2011-12-03T10:15:30+01:00' ISO_ZONED_DATE_TIME Zoned Date Time '2011-12-03T10:15:30+01:00[Europe/Paris]' ISO_DATE_TIME Date and time with ZoneId '2011-12-03T10:15:30+01:00[Europe/Paris]' ISO_ORDINAL_DATE Year and day of year '2012-337' ISO_WEEK_DATE Year and Week '2012-W48-6' ISO_INSTANT Date and Time of an Instant '2011-12-03T10:15:30Z' RFC_1123_DATE_TIME RFC 1123 / RFC 822 'Tue, 3 Jun 2008 11:05:30 GMT'

    格式化和解析的模式

    模式基于简单的字母和符号序列。 模式用于使用ofPattern(String)ofPattern(String, Locale)方法创建Formatter。 例如, "d MMM uuuu"将2011-12-03格式化为“2011年12月3日”。 从模式创建的格式化程序可以根据需要多次使用,它是不可变的并且是线程安全的。

    例如:

      LocalDate date = LocalDate.now();
      DateTimeFormatter formatter = DateTimeFormatter.ofPattern("yyyy MM dd");
      String text = date.format(formatter);
      LocalDate parsedDate = LocalDate.parse(text, formatter);
     

    所有字母'A'到'Z'和'a'到'z'都保留为模式字母。 定义了以下模式字母:

    Pattern Letters and Symbols 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 Pacific Time; PT 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

    模式字母的数量决定了格式。

    文本 :文本样式根据使用的模式字母数确定。 少于4个模式字母将使用short form 正好4个模式字母将使用full form 正好5个模式字母将使用narrow form 模式字母'L','c'和'q'指定文本样式的独立形式。

    Number :如果字母数为1,则使用最小位数输出该值,不进行填充。 否则,将使用位数作为输出字段的宽度,并根据需要将值填充为零。 以下模式字母对字母数量有约束。 只能指定一个'c'和'F'字母。 最多可以指定两个字母“d”,“H”,“h”,“K”,“k”,“m”和“s”。 最多可以指定三个字母'D'。

    数字/文本 :如果模式字母的数量为3或更大,请使用上面的文本规则。 否则使用上面的数字规则。

    分数 :以秒为单位输出纳秒级字段。 纳秒值具有九位数,因此模式字母的数量从1到9.如果小于9,则截断纳秒值,仅输出最高有效数字。

    年份 :字母数决定了使用填充的最小字段宽度。 如果字母数为2,则使用reduced两位数形式。 对于打印,这将输出最右边的两位数字。 对于解析,这将使用2000的基值进行解析,从而产生2000到2099(包括2000和2099)范围内的一年。 如果字母数小于4(但不是2),则符号仅按负SignStyle.NORMAL输出。 否则,如果超过焊盘宽度,则输出符号,如SignStyle.EXCEEDS_PAD所示

    ZoneId :输出时区ID,例如“Europe / Paris”。 如果字母数为2,则输出时区ID。 任何其他计数的字母抛出IllegalArgumentException

    区域名称 :输出时区ID的显示名称。 如果模式字母为“z”,则输出为夏令时感知区域名称。 如果没有足够的信息来确定是否适用DST,则将使用忽略夏令时的名称。 如果字母数为一,二或三,则输出短名称。 如果字母数为4,则输出全名。 五个或更多的字母抛出IllegalArgumentException

    如果模式字母为“v”,则输出提供区域名称,忽略夏令时。 如果字母数为1,则输出短名称。 如果字母数为4,则输出全名。 两个,三个和五个或更多的字母抛出IllegalArgumentException

    偏移X和x :根据模式字母的数量格式化偏移。 一个字母仅输出小时,例如'+01',除非分钟非零,在这种情况下分钟也输出,例如'+0130'。 两个字母输出小时和分钟,没有冒号,例如'+0130'。 三个字母输出小时和分钟,带有冒号,例如'+01:30'。 四个字母输出小时和分钟以及可选秒,没有冒号,例如'+013015'。 五个字母输出小时和分钟,可选秒输出冒号,例如'+01:30:15'。 六个或更多的字母抛出IllegalArgumentException 当要输出的偏移量为零时,模式字母“X”(大写)将输出“Z”,而模式字母“x”(小写)将输出“+00”,“+ 0000”或“+00” :00' 。

    偏移O :根据模式字母的数量格式化局部偏移。 一个字母输出short形式的局部偏移,它是局部偏移文本,例如'GMT',小时不带前导零,可选2位数分钟,第二个非零,和冒号,例如'GMT + 8 ”。 四个字母输出full表格,它是本地化的偏移文本,例如'GMT,具有2位小时和分钟字段,可选的第二字段(如果非零)和冒号,例如'GMT + 08:00'。 任何其他计数的字母抛出IllegalArgumentException

    偏移Z :根据模式字母的数量格式化偏移。 一个,两个或三个字母输出小时和分钟,没有冒号,例如'+0130'。 当偏移量为零时,输出将为“+0000”。 四个字母输出full形式的局部偏移,相当于Offset-O的四个字母。 如果偏移为零,则输出将是相应的本地化偏移文本。 五个字母输出小时,分钟,可选第二个,如果非零,则使用冒号。 如果偏移量为零,则输出“Z”。 六个或更多的字母抛出IllegalArgumentException

    可选部分 :可选部分标记的工作方式与调用DateTimeFormatterBuilder.optionalStart()DateTimeFormatterBuilder.optionalEnd()完全相同

    填充修饰符 :修改紧跟其后用空格填充的模式。 垫宽度由图案字母的数量决定。 这与致电DateTimeFormatterBuilder.padNext(int)相同。

    例如,'ppH'输出左边填充的小时,空格宽度为2。

    任何无法识别的字母都是错误的。 任何非字母字符,除了'[',']','{','}','#'和单引号都将直接输出。 尽管如此,建议在要直接输出的所有字符周围使用单引号,以确保将来的更改不会破坏您的应用程序。

    解决

    解析实现为两阶段操作。 首先,使用格式化程序定义的布局解析文本,生成Map字段值, ZoneIdChronology 其次,分析的数据解析 ,通过验证,合并和简化了各领域到更多有用的。

    这个类提供了五种解析方法。 其中四个执行解析和解析阶段。 第五种方法parseUnresolved(CharSequence, ParsePosition)仅执行第一阶段,结果未解析。 因此,它本质上是一种低级操作。

    解析阶段由在此类上设置的两个参数控制。

    ResolverStyle是一个枚举,提供三种不同的方法,严格,智能和宽松。 智能选项是默认选项。 可以使用withResolverStyle(ResolverStyle)进行设置。

    withResolverFields(TemporalField...)参数允许在解析启动之前过滤要解析的字段集。 例如,如果格式化程序已经解析了年,月,日,年和日,则有两种方法可以解决日期:(年+月+日)和(年+天的年)。 解析器字段允许选择两种方法中的一种。 如果未设置解析器字段,则两种方法必须生成相同的日期。

    解析单独的字段以形成完整的日期和时间是一个复杂的过程,其行为分布在许多类中。 它遵循以下步骤:

    1. 年表确定。 结果的年表是要解析的年表,或者如果没有解析年表,则是在此类上设置的年表,或者如果为空,则为IsoChronology
    2. ChronoField日期字段已解决。 这是使用Chronology.resolveDate(Map, ResolverStyle)实现的。 有关字段解析的文档位于Chronology的实现中。
    3. ChronoField时间字段已解决。 这记录在ChronoField上,并且对于所有年表都是相同的。
    4. 处理不是ChronoField任何字段。 这是使用TemporalField.resolve(Map, TemporalAccessor, ResolverStyle)实现的。 有关字段解析的文档位于TemporalField的实现中。
    5. 将重新解析ChronoField日期和时间字段。 这允许第四步中的字段生成ChronoField值,并将它们处理为日期和时间。
    6. 如果至少有一个小时的可用时间,则形成LocalTime 这涉及提供分钟,秒和小数秒的默认值。
    7. 任何剩余的未解析字段将根据已解决的任何日期和/或时间进行交叉检查。 因此,较早阶段将解决(年+月+日)到某个日期,此阶段将检查该星期几对该日期是否有效。
    8. 如果解析了excess number of days ,则在日期可用时将其添加到日期。
    9. 如果存在基于秒的字段,但未解析LocalTime ,则解析器确保可以使用毫秒,微秒和纳秒值来满足ChronoField的合同。 如果遗漏,这些将被设置为零。
    10. 如果同时解析了日期和时间并且存在偏移或区域,则会创建字段ChronoField.INSTANT_SECONDS 如果解析了偏移量,则偏移量将与LocalDateTime组合以形成瞬间,忽略任何区域。 如果ZoneId在没有偏移,则区分析将与合并LocalDateTime形成使用规则的即时ChronoLocalDateTime.atZone(ZoneId)
    实现要求:
    这个类是不可变的和线程安全的。
    从以下版本开始:
    1.8
    • 字段详细信息

      • ISO_LOCAL_DATE

        public static final DateTimeFormatter ISO_LOCAL_DATE
        ISO日期格式化程序,用于格式化或解析没有偏移的日期,例如“2011-12-03”。

        这将返回一个不可变格式化程序,它能够格式化和解析ISO-8601扩展本地日期格式。 格式包括:

        • year四位数或更多位数。 0000到9999范围内的年份将预先填充为零,以确保四位数。 超出该范围的年份将具有带前缀的正面或负面符号。
        • 破折号
        • 两位数为month-of-year 这是预先填充零以确保两位数。
        • 破折号
        • day-of-month两位数字。 这是预先填充零以确保两位数。

        返回的格式化程序具有ISO设置的年表,以确保正确转换其他日历系统中的日期。 它没有覆盖区域并使用STRICT解析器样式。

      • ISO_OFFSET_DATE

        public static final DateTimeFormatter ISO_OFFSET_DATE
        ISO日期格式化程序,用于格式化或解析具有偏移量的日期,例如“2011-12-03 + 01:00”。

        这将返回一个不可变格式化程序,它能够格式化和解析ISO-8601扩展偏移日期格式。 格式包括:

        • ISO_LOCAL_DATE
        • offset ID 如果偏移量为秒,则即使这不是ISO-8601标准的一部分,也会处理它们。 解析不区分大小写。

        返回的格式化程序具有ISO设置的年表,以确保正确转换其他日历系统中的日期。 它没有覆盖区域并使用STRICT解析器样式。

      • ISO_DATE

        public static final DateTimeFormatter ISO_DATE
        ISO日期格式化程序,使用偏移量格式化或解析日期(如“2011-12-03”或“2011-12-03 + 01:00”)。

        这将返回一个能够格式化和解析ISO-8601扩展日期格式的不可变格式化程序。 格式包括:

        • ISO_LOCAL_DATE
        • 如果偏移量不可用,则格式完成。
        • offset ID 如果偏移量为秒,则即使这不是ISO-8601标准的一部分,也会处理它们。 解析不区分大小写。

        由于此格式化程序具有可选元素,因此可能需要使用parseBest(java.lang.CharSequence, java.time.temporal.TemporalQuery<?>...)进行解析。

        返回的格式化程序具有ISO设置的年表,以确保正确转换其他日历系统中的日期。 它没有覆盖区域并使用STRICT解析器样式。

      • ISO_LOCAL_TIME

        public static final DateTimeFormatter ISO_LOCAL_TIME
        ISO时间格式化程序,用于格式化或解析没有偏移的时间,例如“10:15”或“10:15:30”。

        这将返回一个不可变格式化程序,它能够格式化和解析ISO-8601扩展本地时间格式。 格式包括:

        • 两位数为hour-of-day 这是预先填充零以确保两位数。
        • 结肠
        • 两位数为minute-of-hour 这是预先填充零以确保两位数。
        • 如果第二分钟不可用,则格式完成。
        • 结肠
        • 两位数为second-of-minute 这是预先填充零以确保两位数。
        • 如果纳秒为零或不可用,则格式完成。
        • 小数点
        • nano-of-second一到九位数字。 根据需要输出许多数字。

        返回的格式化程序没有覆盖年表或区域。 它使用了STRICT解析器样式。

      • ISO_OFFSET_TIME

        public static final DateTimeFormatter ISO_OFFSET_TIME
        ISO时间格式化程序,使用偏移格式化或解析时间,例如'10:15 + 01:00'或'10:15:30 + 01:00'。

        这将返回一个不可变格式化程序,能够格式化和解析ISO-8601扩展偏移时间格式。 格式包括:

        • ISO_LOCAL_TIME
        • offset ID 如果偏移量为秒,则即使这不是ISO-8601标准的一部分,也会处理它们。 解析不区分大小写。

        返回的格式化程序没有覆盖年表或区域。 它使用STRICT解析器样式。

      • ISO_TIME

        public static final DateTimeFormatter ISO_TIME
        ISO时间格式化程序,用于格式化或解析时间,如果可用,则为偏移量,例如“10:15”,“10:15:30”或“10:15:30 + 01:00”。

        这将返回一个不可变格式化程序,能够格式化和解析ISO-8601扩展偏移时间格式。 格式包括:

        • ISO_LOCAL_TIME
        • 如果偏移量不可用,则格式完成。
        • offset ID 如果偏移量为秒,则即使这不是ISO-8601标准的一部分,也会处理它们。 解析不区分大小写。

        由于此格式化程序具有可选元素,因此可能需要使用parseBest(java.lang.CharSequence, java.time.temporal.TemporalQuery<?>...)进行解析。

        返回的格式化程序没有覆盖年表或区域。 它使用STRICT解析器样式。

      • ISO_LOCAL_DATE_TIME

        public static final DateTimeFormatter ISO_LOCAL_DATE_TIME
        ISO日期时格式化程序,用于格式化或解析没有偏移的日期时间,例如“2011-12-03T10:15:30”。

        这将返回一个不可变格式化程序,它能够格式化和解析ISO-8601扩展偏移日期时间格式。 格式包括:

        返回的格式化程序具有ISO设置的年表,以确保正确转换其他日历系统中的日期。 它没有覆盖区域并使用STRICT解析器样式。

      • ISO_OFFSET_DATE_TIME

        public static final DateTimeFormatter ISO_OFFSET_DATE_TIME
        ISO日期时格格式器,用于格式化或解析具有偏移的日期时间,例如“2011-12-03T10:15:30 + 01:00”。

        这将返回一个不可变格式化程序,它能够格式化和解析ISO-8601扩展偏移日期时间格式。 格式包括:

        • ISO_LOCAL_DATE_TIME
        • offset ID 如果偏移量为秒,则即使这不是ISO-8601标准的一部分,也会处理它们。 偏移解析是宽松的,这允许分钟和秒是可选的。 解析不区分大小写。

        返回的格式化程序具有ISO设置的年表,以确保正确转换其他日历系统中的日期。 它没有覆盖区域并使用STRICT解析器样式。

      • ISO_ZONED_DATE_TIME

        public static final DateTimeFormatter ISO_ZONED_DATE_TIME
        类似ISO的日期时格格式器,用于格式化或解析具有偏移和区域的日期时间,例如“2011-12-03T10:15:30 + 01:00 [欧洲/巴黎]”。

        这将返回一个不可变格式化程序,它能够格式化和解析扩展ISO-8601扩展偏移日期时间格式的格式以添加时区。 方括号中的部分不是ISO-8601标准的一部分。 格式包括:

        • ISO_OFFSET_DATE_TIME
        • 如果区域ID不可用或者是ZoneOffset则格式完成。
        • 一个开放的方括号'['。
        • zone ID 这不是ISO-8601标准的一部分。 解析区分大小写。
        • 一个紧密的方括号']'。

        返回的格式化程序具有ISO设置的年表,以确保正确转换其他日历系统中的日期。 它没有覆盖区域并使用STRICT解析器样式。

      • ISO_DATE_TIME

        public static final DateTimeFormatter ISO_DATE_TIME
        类似ISO的日期时格式化程序,使用偏移量和区域(如果可用)格式化或解析日期时间,例如“2011-12-03T10:15:30”,“2011-12-03T10:15:30 + 01 :00'或'2011-12-03T10:15:30 + 01:00 [欧洲/巴黎]'。

        这将返回一个不可变格式化程序,它能够格式化和解析ISO-8601扩展本地或偏移日期时间格式,以及指定时区的扩展非ISO格式。 格式包括:

        • ISO_LOCAL_DATE_TIME
        • 如果无法格式化或解析偏移量,则格式完成。
        • offset ID 如果偏移量为秒,则即使这不是ISO-8601标准的一部分,也会处理它们。
        • 如果区域ID不可用或者是ZoneOffset则格式完成。
        • 一个开放的方括号'['。
        • zone ID 这不是ISO-8601标准的一部分。 解析区分大小写。
        • 一个紧密的方括号']'。

        由于此格式化程序具有可选元素,因此可能需要使用parseBest(java.lang.CharSequence, java.time.temporal.TemporalQuery<?>...)进行解析。

        返回的格式化程序具有ISO设置的年表,以确保正确转换其他日历系统中的日期。 它没有覆盖区域并使用STRICT解析器样式。

      • ISO_ORDINAL_DATE

        public static final DateTimeFormatter ISO_ORDINAL_DATE
        ISO日期格式化程序,用于格式化或解析没有偏移的序数日期,例如“2012-337”。

        这将返回一个不可变格式化程序,它能够格式化和解析ISO-8601扩展序数日期格式。 格式包括:

        • year四位数或更多位数。 0000到9999范围内的年份将预先填充为零,以确保四位数。 超出该范围的年份将具有带前缀的正面或负面符号。
        • 破折号
        • day-of-year三位数字。 这是预先填充零以确保三位数。
        • 如果无法格式化或解析偏移量,则格式完成。
        • offset ID 如果偏移量为秒,则即使这不是ISO-8601标准的一部分,也会处理它们。 解析不区分大小写。

        由于此格式化程序具有可选元素,因此可能需要使用parseBest(java.lang.CharSequence, java.time.temporal.TemporalQuery<?>...)进行解析。

        返回的格式化程序具有ISO设置的年表,以确保正确转换其他日历系统中的日期。 它没有覆盖区域并使用STRICT解析器样式。

      • ISO_WEEK_DATE

        public static final DateTimeFormatter ISO_WEEK_DATE
        ISO日期格式化程序,用于格式化或解析没有偏移的基于周的日期,例如“2012-W48-6”。

        这将返回一个不可变的格式化程序,它能够格式化和解析ISO-8601扩展的基于周的日期格式。 格式包括:

        • week-based-year四位数或更多位数。 0000到9999范围内的年份将预先填充为零,以确保四位数。 超出该范围的年份将具有带前缀的正面或负面符号。
        • 破折号
        • 字母'W'。 解析不区分大小写。
        • 两位数为week-of-week-based-year 这是预先填充零以确保三位数。
        • 破折号
        • day-of-week一位数字。 该值从星期一(1)到星期日(7)。
        • 如果无法格式化或解析偏移量,则格式完成。
        • offset ID 如果偏移量为秒,则即使这不是ISO-8601标准的一部分,也会处理它们。 解析不区分大小写。

        由于此格式化程序具有可选元素,因此可能需要使用parseBest(java.lang.CharSequence, java.time.temporal.TemporalQuery<?>...)进行解析。

        返回的格式化程序具有ISO设置的年表,以确保正确转换其他日历系统中的日期。 它没有覆盖区域并使用STRICT解析器样式。

      • ISO_INSTANT

        public static final DateTimeFormatter ISO_INSTANT
        ISO即时格式化程序,用于格式化或解析UTC中的瞬间,例如“2011-12-03T10:15:30Z”。

        这将返回一个能够格式化和解析ISO-8601即时格式的不可变格式化程序。 格式化时,始终输出秒的分钟。 毫秒秒根据需要输出零,三,六或九位数。 解析时,至少需要秒时间字段。 解析从零到九的小数秒。 未使用本地化的十进制样式。

        这是一种特殊情况格式化程序,旨在允许Instant的人类可读形式。 Instant类仅用于表示某个时间点,并在内部存储一个以纳秒为单位的值,该值为1970-01-01Z的固定时期。 因此,如果没有提供某种形式的时区,则无法将Instant格式化为日期或时间。 此格式化允许Instant到通过提供一种使用合适的转化被格式化, ZoneOffset.UTC

        格式包括:

        返回的格式化程序没有覆盖年表或区域。 它使用STRICT解析器样式。

      • BASIC_ISO_DATE

        public static final DateTimeFormatter BASIC_ISO_DATE
        ISO日期格式化程序,用于格式化或解析没有偏移的日期,例如“20111203”。

        这将返回一个不可变格式化程序,它能够格式化和解析ISO-8601基本本地日期格式。 格式包括:

        • 四位数为year 仅支持0000至9999范围内的年份。
        • 两位数为month-of-year 这是预先填充零以确保两位数。
        • 两位数为day-of-month 这是预先填充零以确保两位数。
        • 如果无法格式化或解析偏移量,则格式完成。
        • offset ID没有冒号。 如果偏移量为秒,则即使这不是ISO-8601标准的一部分,也会处理它们。 偏移解析是宽松的,这允许分钟和秒是可选的。 解析不区分大小写。

        由于此格式化程序具有可选元素,因此可能需要使用parseBest(java.lang.CharSequence, java.time.temporal.TemporalQuery<?>...)进行解析。

        返回的格式化程序具有ISO设置的年表,以确保正确转换其他日历系统中的日期。 它没有覆盖区域并使用STRICT解析器样式。

      • RFC_1123_DATE_TIME

        public static final DateTimeFormatter RFC_1123_DATE_TIME
        RFC-1123日期时间格式化程序,例如'Tue,2008年6月3日11:05:30 GMT'。

        这将返回一个不可变的格式化程序,能够格式化和解析大多数RFC-1123格式。 RFC-1123更新RFC-822将年份从两位数改为四位。 此实施需要四位数年份。 此实施也不处理北美或军区名称,仅处理'GMT'和抵消金额。

        格式包括:

        • 如果星期几无法格式化或解析,则跳转到日期。
        • 三个字母day-of-week英文。
        • 一个逗号
        • 空间
        • day-of-month一位或两位数字。
        • 空间
        • 三个字母month-of-year英文。
        • 空间
        • 四位数为year 仅支持0000至9999范围内的年份。
        • 空间
        • 两位数为hour-of-day 这是预先填充零以确保两位数。
        • 结肠
        • 两位数为minute-of-hour 这是预先填充零以确保两位数。
        • 如果第二分钟不可用,则跳转到下一个空格。
        • 结肠
        • 两位数为second-of-minute 这是预先填充零以确保两位数。
        • 空间
        • offset ID没有冒号或秒。 零偏移使用“GMT”。 不处理北美地区名称和军事区域名称。

        解析不区分大小写。

        返回的格式化程序具有ISO设置的年表,以确保正确转换其他日历系统中的日期。 它没有覆盖区域并使用SMART解析器样式。

    • 方法详细信息

      • ofPattern

        public static DateTimeFormatter ofPattern​(String pattern,
                                                  Locale locale)
        使用指定的模式和语言环境创建格式化程序。

        此方法将基于类文档中描述的简单pattern of letters and symbols创建格式化程序。 例如, d MMM uuuu将2011-12-03格式化为“2011年12月3日”。

        格式化程序将使用指定的语言环境。 这可以使用返回的格式化程序上的withLocale(Locale)进行更改。

        返回的格式化程序没有覆盖年表或区域。 它使用SMART解析器样式。

        参数
        pattern - 要使用的模式,而不是null
        locale - 要使用的语言环境,而不是null
        结果
        基于模式的格式化程序,不是null
        异常
        IllegalArgumentException - 如果模式无效
        另请参见:
        DateTimeFormatterBuilder.appendPattern(String)
      • ofLocalizedDate

        public static DateTimeFormatter ofLocalizedDate​(FormatStyle dateStyle)
        返回ISO年表的特定于语言环境的日期格式。

        这将返回格式化程序,该格式化程序将格式化或解析日期。 使用的确切格式模式因区域设置而异。

        语言环境由格式化程序确定。 通过此方法直接返回的格式化程序将使用default FORMAT locale 可以使用withLocale(Locale)在此方法的结果上控制区域设置。

        请注意,本地化模式是懒惰地查找的。 DateTimeFormatter包含所需的样式和区域设置,查找所需的模式。

        返回的格式化程序具有ISO设置的年表,以确保正确转换其他日历系统中的日期。 它没有覆盖区域并使用SMART解析器样式。

        参数
        dateStyle - 要获取的格式化程序样式,而不是null
        结果
        日期格式化程序,不是null
      • ofLocalizedTime

        public static DateTimeFormatter ofLocalizedTime​(FormatStyle timeStyle)
        返回ISO年表的特定于语言环境的时间格式。

        这将返回格式化程序,该格式化程序将格式化或解析时间。 使用的确切格式模式因区域设置而异。

        语言环境由格式化程序确定。 直接通过此方法返回的格式化程序将使用default FORMAT locale 可以使用withLocale(Locale)对此方法的结果控制区域设置。

        请注意,本地化模式是懒惰地查找的。 这个DateTimeFormatter拥有所需的样式和区域设置,查找所需的模式。

        返回的格式化程序具有ISO设置的年表,以确保正确转换其他日历系统中的日期。 它没有覆盖区域并使用SMART解析器样式。 FULLLONG样式通常需要时区。 当使用这些风格格式化,一ZoneId必须是可用的,无论是使用ZonedDateTimewithZone(java.time.ZoneId)

        参数
        timeStyle - 要获取的格式化程序样式,而不是null
        结果
        时间格式化程序,不是null
      • ofLocalizedDateTime

        public static DateTimeFormatter ofLocalizedDateTime​(FormatStyle dateTimeStyle)
        返回ISO年表的特定于语言环境的日期时间格式化程序。

        这将返回格式化程序,该格式化程序将格式化或解析日期时间。 使用的确切格式模式因区域设置而异。

        语言环境由格式化程序确定。 通过此方法直接返回的格式化程序将使用default FORMAT locale 可以使用withLocale(Locale)在此方法的结果上控制区域设置。

        请注意,本地化模式是懒惰地查找的。 DateTimeFormatter包含所需的样式和区域设置,查找所需的模式。

        返回的格式化程序具有ISO设置的年表,以确保正确转换其他日历系统中的日期。 它没有覆盖区域并使用SMART解析器样式。 FULLLONG样式通常需要时区。 当使用这些风格格式化,一ZoneId必须是可用的,无论是使用ZonedDateTimewithZone(java.time.ZoneId)

        参数
        dateTimeStyle - 要获取的格式化程序样式,而不是null
        结果
        日期时格格式器,不是null
      • ofLocalizedDateTime

        public static DateTimeFormatter ofLocalizedDateTime​(FormatStyle dateStyle,
                                                            FormatStyle timeStyle)
        返回ISO年表的特定于语言环境的日期和时间格式。

        这将返回格式化程序,该格式化程序将格式化或解析日期时间。 使用的确切格式模式因区域设置而异。

        语言环境由格式化程序确定。 通过此方法直接返回的格式化程序将使用default FORMAT locale 可以使用此方法的结果使用withLocale(Locale)控制区域设置。

        请注意,本地化模式是懒惰地查找的。 DateTimeFormatter包含所需的样式和区域设置,查找所需的模式。

        返回的格式化程序具有ISO设置的年表,以确保正确转换其他日历系统中的日期。 它没有覆盖区域并使用SMART解析器样式。 FULLLONG样式通常需要时区。 当使用这些风格格式化,一ZoneId必须是可用的,无论是使用ZonedDateTimewithZone(java.time.ZoneId)

        参数
        dateStyle - 要获取的日期格式化程序样式,而不是null
        timeStyle - 要获取的时间格式器样式,而不是null
        结果
        日期,时间或日期时间格式化程序,不为空
      • parsedExcessDays

        public static final TemporalQuery<Period> parsedExcessDays()
        一个查询,提供对已解析的超出天数的访问权限。

        这将返回单例query ,该单元提供对解析中的其他信息的访问。 查询始终返回非null周期,返回零周期而不是null。

        有两种情况,此查询可能返回非零周期。

        • 如果ResolverStyleLENIENT并且解析时间没有日期,那么解析的完整结果包括LocalTime和超过Period天。
        • 如果ResolverStyleSMART并且解析时间没有时间为24:00:00的日期,那么解析的完整结果包括LocalTime的00:00:00和超过Period的一天。

        在这两种情况下,如果解析完整的ChronoLocalDateTimeInstant ,则将多余的天数添加到日期部分。 因此,此查询将返回零周期。

        SMART行为处理常见的“一天结束”24:00值。 LENIENT模式下的处理也会产生相同的结果:

          Text to parse        Parsed object                         Excess days
          "2012-12-03T00:00"   LocalDateTime.of(2012, 12, 3, 0, 0)   ZERO
          "2012-12-03T24:00"   LocalDateTime.of(2012, 12, 4, 0, 0)   ZERO
          "00:00"              LocalTime.of(0, 0)                    ZERO
          "24:00"              LocalTime.of(0, 0)                    Period.ofDays(1) 
        查询可以使用如下:
          TemporalAccessor parsed = formatter.parse(str);
          LocalTime time = parsed.query(LocalTime::from);
          Period extraDays = parsed.query(DateTimeFormatter.parsedExcessDays()); 
        结果
        一个查询,提供对已解析的超出天数的访问权限
      • parsedLeapSecond

        public static final TemporalQuery<Boolean> parsedLeapSecond()
        提供对是否解析闰秒的访问的查询。

        这将返回一个单例query ,它可以从解析中访问其他信息。 查询始终返回非null布尔值,如果解析看到闰秒,则返回true,否则返回false。

        即时解析处理'23:59:60'的特殊“闰秒”时间。 闰秒发生在UTC时区的“23:59:60”,但是在不同时区的其他本地时间。 为避免这种潜在的歧义,闰秒的处理仅限于DateTimeFormatterBuilder.appendInstant() ,因为该方法始终使用UTC区域偏移量解析瞬间。

        如果收到时间'23:59:60',则应用简单转换,用59替换60分钟的第二分钟。可以在解析结果上使用此查询来确定闰秒调整是否为制作。 该查询将返回true ,如果它没有调整去除闰秒,而false如果不是。 请注意,应用闰秒平滑机制(如UTC-SLS)是应用程序的责任,如下所示:

          TemporalAccessor parsed = formatter.parse(str);
          Instant instant = parsed.query(Instant::from);
          if (parsed.query(DateTimeFormatter.parsedLeapSecond())) {
            // validate leap-second is correct and apply correct smoothing
          } 
        结果
        一个查询,提供对是否解析闰秒的访问权限
      • getLocale

        public Locale getLocale()
        获取格式化期间要使用的语言环境。

        这用于查找需要特定本地化的格式化程序的任何部分,例如文本或本地化模式。

        结果
        此格式化程序的语言环境,不为null
      • withLocale

        public DateTimeFormatter withLocale​(Locale locale)
        返回具有新语言环境的此formatter的副本。

        这用于查找需要特定本地化的格式化程序的任何部分,例如文本或本地化模式。

        语言环境存储为传入,无需进一步处理。 如果语言环境具有Unicode extensions ,则稍后可以在文本处理中使用它们。 要从unicode扩展设置年表,时区和小数形式,请参阅localizedBy()

        此实例是不可变的,不受此方法调用的影响。

        参数
        locale - 新的语言环境,不为null
        结果
        基于此格式化程序的格式化程序,具有请求的语言环境,而不是null
        另请参见:
        localizedBy(Locale)
      • localizedBy

        public DateTimeFormatter localizedBy​(Locale locale)
        返回此格式化程序的副本,其中包含区域设置,日历,区域,小数样式和/或时区的本地化值,它们取代此格式化程序中的值。

        这用于查找需要特定本地化的格式化程序的任何部分,例如文本或本地化模式。 如果区域设置包含“ca”(日历),“nu”(编号系统),“rg”(区域覆盖)和/或“tz”(时区) Unicode extensions ,则年表,编号系统和/或区域为覆盖。 如果同时指定了“ca”和“rg”,则来自“ca”扩展名的时间顺序将取代“rg”扩展名中的隐式值。 “nu”扩展也是如此。

        withLocale方法不同, 对此方法的调用可能会产生不同的格式化程序,具体取决于与其他withXXXX()方法链接的方法的顺序。

        此实例是不可变的,不受此方法调用的影响。

        参数
        locale - 语言环境,不为null
        结果
        基于此格式化程序的格式化程序,具有日历,小数形式和/或时区的本地化值,取代此格式化程序中的值。
        从以下版本开始:
        10
        另请参见:
        withLocale(Locale)
      • getDecimalStyle

        public DecimalStyle getDecimalStyle()
        获取格式化期间要使用的DecimalStyle。
        结果
        此格式化程序的语言环境,不为null
      • withDecimalStyle

        public DateTimeFormatter withDecimalStyle​(DecimalStyle decimalStyle)
        使用新的DecimalStyle返回此formatter的副本。

        此实例是不可变的,不受此方法调用的影响。

        参数
        decimalStyle - 新的DecimalStyle,不为null
        结果
        基于此格式化程序的格式化程序,具有请求的DecimalStyle,而不是null
      • getChronology

        public Chronology getChronology()
        获取格式化期间要使用的重写年代表。

        这将返回覆盖年表,用于转换日期。 默认情况下,格式化程序没有覆盖时间顺序,返回null。 有关覆盖的更多详细信息,请参见withChronology(Chronology)

        结果
        此格式化程序的重写时间顺序,如果没有重写,则返回null
      • withChronology

        public DateTimeFormatter withChronology​(Chronology chrono)
        返回此格式化程序的副本,其中包含新的覆盖时间顺序。

        这将返回一个格式化程序,该格式化程序具有与此格式化程序类似的状态,但设置了覆盖时间顺 默认情况下,格式化程序没有覆盖时间顺序,返回null。

        如果添加了覆盖,则格式化或解析的任何日期都将受到影响。

        格式化时,如果时态对象包含日期,则它将转换为覆盖年表中的日期。 是否包含日期是通过查询EPOCH_DAY字段来确定的。 除非被覆盖,否则任何时间或区域都将保持不变。

        如果临时对象不包含日期,但包含一个或多个ChronoField日期字段,则抛出DateTimeException 在所有其他情况下,覆盖年表被添加到时间,替换任何先前的年表,但不更改日期/时间。

        解析时,需要考虑两种不同的情况。 如果直接从文本中解析了年表,可能是因为使用了DateTimeFormatterBuilder.appendChronologyId() ,那么这个覆盖年表没有任何效果。 如果未解析任何区域,则将使用此覆盖年表按照年表的日期解析规则将ChronoField值解释为日期。

        此实例是不可变的,不受此方法调用的影响。

        参数
        chrono - 新的年表,如果没有覆盖则为null
        结果
        基于此格式化程序的格式化程序,具有请求的覆盖时间顺序,而不是null
      • getZone

        public ZoneId getZone()
        获取格式化期间要使用的覆盖区域。

        这将返回覆盖区域,用于转换瞬间。 默认情况下,格式化程序没有覆盖区域,返回null。 有关覆盖的更多详细信息,请参见withZone(ZoneId)

        结果
        此格式化程序的覆盖区域,如果没有覆盖,则返回null
      • withZone

        public DateTimeFormatter withZone​(ZoneId zone)
        使用新的覆盖区域返回此格式化程序的副本。

        这将返回一个格式化程序,其状态与此格式化程序类似,但设置了覆盖区域。 默认情况下,格式化程序没有覆盖区域,返回null。

        如果添加了覆盖,则任何格式化或解析的瞬间都将受到影响。

        格式化时,如果临时对象包含瞬间,则使用覆盖区域将其转换为分区日期时间。 是否瞬时是通过查询INSTANT_SECONDS字段来确定的。 如果输入具有时间顺序,那么除非被覆盖,否则它将被保留。 如果输入没有年表,例如Instant ,那么将使用ISO年表。

        如果临时对象不包含瞬间,但确实包含偏移量,则进行额外检查。 如果规范化的覆盖区域是与时间偏移不同的偏移,则抛出DateTimeException 在所有其他情况下,覆盖区域将添加到时间,替换任何以前的区域,但不更改日期/时间。

        解析时,需要考虑两种不同的情况。 如果区域已直接从文本中解析,可能是因为使用了DateTimeFormatterBuilder.appendZoneId() ,则此覆盖区域无效。 如果没有解析区域,则此覆盖区域将包含在解析结果中,可用于构建时刻和日期时间。

        此实例是不可变的,不受此方法调用的影响。

        参数
        zone - 新的覆盖区域,如果没有覆盖,则为null
        结果
        基于此格式化程序的格式化程序,具有请求的覆盖区域,而不是null
      • getResolverStyle

        public ResolverStyle getResolverStyle()
        获取解析期间要使用的解析器样式。

        这将返回解析器样式,在解析第二阶段时将字段解析为日期和时间。 默认情况下,格式化程序具有SMART解析程序样式。 有关详细信息,请参见withResolverStyle(ResolverStyle)

        结果
        此格式化程序的解析器样式,不为null
      • withResolverStyle

        public DateTimeFormatter withResolverStyle​(ResolverStyle resolverStyle)
        使用新的解析程序样式返回此formatter的副本。

        这将返回一个格式化程序,其状态与此格式化程序类似,但设置了解析程序样式。 默认情况下,格式化程序具有SMART解析程序样式。

        更改解析程序样式仅在解析期间有效。 解析文本字符串分两个阶段进行。 阶段1是根据添加到构建器的字段的基本文本解析。 阶段2将解析的字段 - 值对解析为日期和/或时间对象。 解析器样式用于控制阶段2解析的发生方式。 有关可用选项的更多信息,请参见ResolverStyle

        此实例是不可变的,不受此方法调用的影响。

        参数
        resolverStyle - 新的解析器样式,不为null
        结果
        基于此格式化程序的格式化程序,具有请求的解析程序样式,而不是null
      • getResolverFields

        public Set<TemporalField> getResolverFields()
        获取解析期间要使用的解析器字段。

        这将返回解析器字段,在解析第二阶段时将字段解析为日期和时间。 默认情况下,格式化程序没有解析器字段,因此返回null。 有关详细信息,请参见withResolverFields(Set)

        结果
        此格式化程序的不可变的解析程序字段集,如果没有字段则为null
      • withResolverFields

        public DateTimeFormatter withResolverFields​(TemporalField... resolverFields)
        返回此格式化程序的副本,其中包含一组新的解析程序字段。

        这将返回一个格式化程序,其状态与此格式化程序类似,但设置了解析程序字段。 默认情况下,格式化程序没有解析程序字段。

        更改解析程序字段仅在解析期间有效。 解析文本字符串分两个阶段进行。 阶段1是根据添加到构建器的字段的基本文本解析。 阶段2将解析的字段 - 值对解析为日期和/或时间对象。 解析器字段用于过滤阶段1和阶段2之间的字段 - 值对。

        这可用于在两种或更多种方式之间进行选择,以便解决日期或时间。 例如,如果格式化程序包含年,月,日,日和年,则有两种方法可以解决日期问题。 使用参数YEARDAY_OF_YEAR调用此方法将确保使用年份和日期解析日期,这实际上意味着在解决阶段忽略月份和日期。

        以类似的方式,该方法可用于忽略否则将被交叉检查的辅助字段。 例如,如果格式化程序包含年,月,日,星期和星期几,那么只有一种方法可以解决日期,但是星期几的解析值将被交叉检查反对解决的日期。 调用此方法与参数YEARMONTH_OF_YEARDAY_OF_MONTH将确保日期是正确解决,但没有任何交叉检查的某一天的一周。

        在实现方面,该方法表现如下。 解析阶段的结果可以被认为是字段到值的映射。 此方法的行为是使该映射在阶段1和阶段2之间进行过滤,删除除指定为此方法的参数之外的所有字段。

        此实例是不可变的,不受此方法调用的影响。

        参数
        resolverFields - 新的解析程序字段集,如果没有字段,则为null
        结果
        基于此格式化程序的格式化程序,具有请求的解析程序样式,而不是null
      • withResolverFields

        public DateTimeFormatter withResolverFields​(Set<TemporalField> resolverFields)
        返回此格式化程序的副本,其中包含一组新的解析程序字段。

        这将返回一个格式化程序,其状态与此格式化程序类似,但设置了解析程序字段。 默认情况下,格式化程序没有解析程序字段。

        更改解析程序字段仅在解析期间有效。 解析文本字符串分两个阶段进行。 阶段1是根据添加到构建器的字段的基本文本解析。 阶段2将解析的字段 - 值对解析为日期和/或时间对象。 解析器字段用于过滤阶段1和阶段2之间的字段 - 值对。

        这可用于在两种或更多种方式之间进行选择,以便解决日期或时间。 例如,如果格式化程序包含年,月,日,日和年,则有两种方法可以解决日期问题。 使用参数YEARDAY_OF_YEAR调用此方法将确保使用年份和年份解析日期,这实际上意味着在解析阶段忽略月份和日期。

        以类似的方式,该方法可用于忽略否则将被交叉检查的辅助字段。 例如,如果格式化程序包含年,月,日,星期和星期几,那么只有一种方法可以解决日期,但是星期几的解析值将被交叉检查反对解决的日期。 调用此方法与参数YEARMONTH_OF_YEARDAY_OF_MONTH将确保日期是正确解决,但没有任何交叉检查的某一天的一周。

        在实现方面,该方法表现如下。 解析阶段的结果可以被认为是字段到值的映射。 此方法的行为是使该映射在阶段1和阶段2之间进行过滤,删除除指定为此方法的参数之外的所有字段。

        此实例是不可变的,不受此方法调用的影响。

        参数
        resolverFields - 新的解析器字段集,如果没有字段,则为null
        结果
        基于此格式化程序的格式化程序,具有请求的解析程序样式,而不是null
      • format

        public String format​(TemporalAccessor temporal)
        使用此格式化程序格式化日期时间对象。

        这使用格式化程序的规则将日期时间格式化为String。

        参数
        temporal - 要格式化的时态对象,而不是null
        结果
        格式化的字符串,不是null
        异常
        DateTimeException - 如果格式化期间发生错误
      • formatTo

        public void formatTo​(TemporalAccessor temporal,
                             Appendable appendable)
        使用此格式化程序将日期时间对象格式化为Appendable

        这会将格式化的日期时间输出到指定的目的地。 Appendable是受所有键字符输出类别,包括实现一个通用接口StringBufferStringBuilderPrintStreamWriter

        虽然Appendable方法抛出IOException ,但这种方法没有。 相反,任何IOException都包含在运行时异常中。

        参数
        temporal - 要格式化的时态对象,而不是null
        appendable - 可以格式化为,不为null
        异常
        DateTimeException - 如果格式化期间发生错误
      • parse

        public TemporalAccessor parse​(CharSequence text)
        完全解析生成临时对象的文本。

        这会解析生成临时对象的整个文本。 使用parse(CharSequence, TemporalQuery)通常更有用。 此方法的结果是TemporalAccessor已经解决,应用基本验证检查以帮助确保有效的日期时间。

        如果解析完成而没有读取文本的整个长度,或者在解析或合并期间出现问题,则抛出异常。

        参数
        text - 要解析的文本,而不是null
        结果
        解析的时态对象,而不是null
        异常
        DateTimeParseException - 如果无法解析请求的结果
      • parse

        public TemporalAccessor parse​(CharSequence text,
                                      ParsePosition position)
        使用此格式化程序解析文本,提供对文本位置的控制。

        这解析文本而不要求解析从字符串的开头开始或在结束时完成。 此方法的结果是TemporalAccessor已经解决,应用基本验证检查以帮助确保有效的日期时间。

        该文本将从指定的开始ParsePosition解析。 无需解析文本的整个长度, ParsePosition将在解析结束时使用索引进行更新。

        该方法的操作与在java.text.Format上使用ParsePosition类似方法略有不同。 该类将使用ParsePosition上的错误索引返回错误。 相反,如果发生错误,此方法将抛出DateTimeParseException ,异常包含错误索引。 由于此API中解析和解析日期/时间的复杂性增加,因此这种行为更改是必要的。

        如果格式化程序使用不同的值多次解析同一字段,则结果将是错误。

        参数
        text - 要解析的文本,而不是null
        position - 要解析的位置,使用已解析的长度和任何错误的索引进行更新,而不是null
        结果
        解析的时态对象,而不是null
        异常
        DateTimeParseException - 如果无法解析请求的结果
        IndexOutOfBoundsException - 如果头寸无效
      • parse

        public <T> T parse​(CharSequence text,
                           TemporalQuery<T> query)
        完全解析生成指定类型对象的文本。

        大多数应用程序应该使用此方法进行解析。 它解析整个文本以生成所需的日期时间。 该查询通常是对from(TemporalAccessor)方法的方法引用。 例如:

          LocalDateTime dt = parser.parse(str, LocalDateTime::from); 
        如果解析完成而没有读取文本的整个长度,或者在解析或合并期间出现问题,则抛出异常。
        参数类型
        T - 已解析日期时间的类型
        参数
        text - 要解析的文本,而不是null
        query - 定义要解析的类型的查询,而不是null
        结果
        解析的日期时间,而不是null
        异常
        DateTimeParseException - 如果无法解析请求的结果
      • parseBest

        public TemporalAccessor parseBest​(CharSequence text,
                                          TemporalQuery<?>... queries)
        完全解析生成指定类型之一的对象的文本。

        当解析器可以处理可选元素时,此解析方法很方便使用。 例如,'uuuu-MM-dd HH.mm [VV]'的模式可以完全解析为ZonedDateTime ,或部分解析为LocalDateTime 必须按顺序指定查询,从最佳匹配的完全解析选项开始,以最差匹配的最小解析选项结束。 该查询通常是对from(TemporalAccessor)方法的方法引用。

        结果与成功解析的第一个类型相关联。 通常,应用程序将使用instanceof来检查结果。 例如:

          TemporalAccessor dt = parser.parseBest(str, ZonedDateTime::from, LocalDateTime::from);
          if (dt instanceof ZonedDateTime) {
           ...
          } else {
           ...
          } 
        如果解析完成而没有读取文本的整个长度,或者在解析或合并期间出现问题,则抛出异常。
        参数
        text - 要解析的文本,而不是null
        queries - 定义要尝试解析的类型的查询,必须实现 TemporalAccessor ,而不是null
        结果
        解析的日期时间,而不是null
        异常
        IllegalArgumentException - 如果指定的类型少于2种
        DateTimeParseException - 如果无法解析请求的结果
      • parseUnresolved

        public TemporalAccessor parseUnresolved​(CharSequence text,
                                                ParsePosition position)
        使用此格式化程序解析文本,而不解析结果,用于高级用例。

        解析实现为两阶段操作。 首先,使用格式化程序定义的布局解析文本,生成Map字段值, ZoneIdChronology 其次,分析的数据解析 ,通过验证,合并和简化了各领域到更多有用的。 此方法执行解析阶段但不执行解析阶段。

        该方法的结果是TemporalAccessor ,它表示输入中看到的数据。 未验证值,因此解析日期字符串'2012-00-65'将导致具有三个字段的时间 - '2012'年,'0'月和'65'月日。

        该文本将从指定的开始ParsePosition解析。 无需解析文本的整个长度, ParsePosition将在解析结束时使用索引进行更新。

        使用ParsePosition的错误索引字段而不是DateTimeParseException返回错误。 返回的错误索引将设置为指示错误的索引。 在使用结果之前,呼叫者必须检查错误。

        如果格式化程序使用不同的值多次解析同一字段,则结果将是错误。

        此方法适用于在解析期间需要访问内部状态的高级用例。 典型的应用程序代码应使用parse(CharSequence, TemporalQuery)或目标类型的解析方法。

        参数
        text - 要解析的文本,而不是null
        position - 要解析的位置,使用已解析的长度和任何错误的索引进行更新,而不是null
        结果
        解析后的文本,如果解析导致错误,则返回null
        异常
        DateTimeException - 如果在解析过程中出现问题
        IndexOutOfBoundsException - 如果头寸无效
      • toFormat

        public Format toFormat()
        将此格式化程序作为java.text.Format实例返回。

        返回的Format实例将格式化任何TemporalAccessor并解析为已解析的TemporalAccessor

        例外情况将遵循Format的定义,有关IllegalArgumentException期间ParseExceptionParseException详细信息,请参阅这些方法,或者在解析期间ParseException null。 格式不支持归属返回的格式字符串。

        结果
        此格式化程序作为经典格式实例,不为null
      • toFormat

        public Format toFormat​(TemporalQuery<?> parseQuery)
        将此格式化程序作为将使用指定查询进行分析的java.text.Format实例返回。

        返回的Format实例将格式化任何TemporalAccessor并解析为指定的类型。 该类型必须是parse(java.lang.CharSequence)支持的类型

        例外将遵循Format的定义,有关IllegalArgumentException期间ParseExceptionParseException详细信息,请参阅这些方法,或者在解析期间ParseException null。 格式不支持归属返回的格式字符串。

        参数
        parseQuery - 定义要解析的类型的查询,而不是null
        结果
        此格式化程序作为经典格式实例,不为null
      • toString

        public String toString()
        返回底层格式化程序的描述。
        重写:
        toString ,课程 Object
        结果
        此格式化程序的描述,不为null