2021-04-18 11:36  阅读(63)
文章分类:Java 基础教程 文章标签:JavaJava 教程
©  原文作者:w3cschool 原文地址:https://www.w3cschool.cn/java/java-date-time-methods.html

Java日期时间 - Java日期和时间解析

DateTimeFormatter处理的解析是从字符串创建日期时间对象。

用于格式化的相同符号用作解析字符串值。

如果无法解析文本,则会抛出DateTimeParseException。它有两种方法来提供错误的详细信息。getErrorIndex()返回文本中的错误偏移量。getParsedString()返回正在解析的文本。

日期时间相关的类和DateTimeFormatter定义了将字符串解析为datetime对象的方法。

parse()方法从datetime类

每个datetime类有两个重载版本的parse()parse()方法的返回类型与定义datetime类相同。

下面的代码显示了如何使用parse()方法从LocalDate对象:

    import java.time.LocalDate;
    import java.time.format.DateTimeFormatter;
    
    public class Main {
    
      public static void main(String[] args) {
        LocalDate ld1 = LocalDate.parse("2014-06-10");
        DateTimeFormatter formatter = DateTimeFormatter.ofPattern("MM/dd/yyyy");
        LocalDate ld2 = LocalDate.parse("06/10/2014", formatter);
    
        System.out.println("ld1: " + ld1);
        System.out.println("ld2: " + ld2);
      }
    }
    

上面的代码生成以下结果。

20210418113110_1.png

parse()从DateTimeFormatter类

DateTimeFormatter包含几个将字符串解析为datetime对象的parse()方法。

它们中的大多数返回一个TemporalAccessor对象,您可以查询它以获取datetime组件。

您可以将TemporalAccessor对象传递给datetime类的from()方法,以获取特定的datetime对象。

以下代码显示如何使用DateTimeFormatter对象解析MM/dd /yyyy格式的字符串,以构造LocalDate:

    import java.time.LocalDate;
    import java.time.format.DateTimeFormatter;
    import java.time.temporal.TemporalAccessor;
    
    public class Main {
    
      public static void main(String[] args) {
        DateTimeFormatter formatter = DateTimeFormatter.ofPattern("MM/dd/yyyy");
        TemporalAccessor ta = formatter.parse("06/10/2014");
        LocalDate ld = LocalDate.from(ta);
        System.out.println(ld);
    
      }
    }
    

上面的代码生成以下结果。

2021041811318_2.png

例子

parse()方法可以通过TemporalQuery将字符串直接解析为特定的datetime对象。

    import java.time.LocalDate;
    import java.time.format.DateTimeFormatter;
    
    public class Main {
    
      public static void main(String[] args) {
        DateTimeFormatter formatter = DateTimeFormatter.ofPattern("MM/dd/yyyy");
        LocalDate ld = formatter.parse("06/10/2014", LocalDate::from);
        System.out.println(ld);
      }
    }
    

上面的代码生成以下结果。

2021041811317_3.png

Parse Best

DateTimeFormatter类包含一个parseBest()方法。

parseBest()方法尝试匹配与提供的格式的字符串可选格式符号。

在以下模式中,我们有两个可选模式。

yyyy-MM-dd["T"HH:mm:ss[Z]]

文本可以完全解析为OffsetDateTime,并部分解析为LocalDateTime和LocalDate。

以下代码显示如何使用可选模式从字符串获取最佳匹配日期时间对象。

    import java.time.LocalDate;
    import java.time.LocalDateTime;
    import java.time.OffsetDateTime;
    import java.time.format.DateTimeFormatter;
    import java.time.format.DateTimeParseException;
    import java.time.temporal.TemporalAccessor;
    
    public class Main {
    
      public static void main(String[] args) {
        DateTimeFormatter parser = DateTimeFormatter
            .ofPattern("yyyy-MM- dd["T"HH:mm:ss[Z]]");
        parseStr(parser, "2014-06-31");
        parseStr(parser, "2014-06-31T15:31:12");
        parseStr(parser, "2014-06-31T15:31:12-0500");
        parseStr(parser, "2014-06-31Hello");
    
      }
    
      public static void parseStr(DateTimeFormatter formatter, String text) {
        try {
          TemporalAccessor ta = formatter.parseBest(text, OffsetDateTime::from,
              LocalDateTime::from, LocalDate::from);
          if (ta instanceof OffsetDateTime) {
            OffsetDateTime odt = OffsetDateTime.from(ta);
            System.out.println("OffsetDateTime: " + odt);
          } else if (ta instanceof LocalDateTime) {
            LocalDateTime ldt = LocalDateTime.from(ta);
            System.out.println("LocalDateTime: " + ldt);
          } else if (ta instanceof LocalDate) {
            LocalDate ld = LocalDate.from(ta);
            System.out.println("LocalDate: " + ld);
          } else {
            System.out.println("Parsing returned: " + ta);
          }
        } catch (DateTimeParseException e) {
          System.out.println(e.getMessage());
        }
      }
    
    }
    

上面的代码生成以下结果。

2021041811312_4.png

点赞(0)
版权归原创作者所有,任何形式转载请联系作者; Java 技术驿站 >> Java 日期和时间解析
上一篇
Java 特定区域格式
下一篇
Java 遗留日期日历