使用Java8将一年String解析为LocalDate

时间:2016-12-28 08:22:27

标签: java-8 jodatime localdate

使用Joda库,您可以

DateTimeFormat.forPattern("yyyy").parseLocalDate("2008")

在2008年1月1日创建LocalDate

使用Java8,您可以尝试

LocalDate.parse("2008",DateTimeFormatter.ofPattern("yyyy"))

但无法解析:

Text '2008' could not be parsed: Unable to obtain LocalDate from TemporalAccessor: {Year=2008},ISO of type java.time.format.Parsed

有没有其他选择,而不是像

那样具体写作
LocalDate.ofYearDay(Integer.valueOf("2008"), 1)

3 个答案:

答案 0 :(得分:11)

LocalDate解析要求指定所有年,月和日。

您可以使用DateTimeFormatterBuilder并使用parseDefaulting方法指定月和日的默认值:

DateTimeFormatter format = new DateTimeFormatterBuilder()
     .appendPattern("yyyy")
     .parseDefaulting(ChronoField.MONTH_OF_YEAR, 1)
     .parseDefaulting(ChronoField.DAY_OF_MONTH, 1)
     .toFormatter();

LocalDate.parse("2008", format);

答案 1 :(得分:2)

    String yearStr = "2008";
    Year year = Year.parse(yearStr);
    System.out.println(year);

输出:

  

2008

如果您需要的是表示一年的方式,那么LocalDate不适合您的目的。 java.time完全包含Year课程。请注意,我们甚至不需要显式格式化器,因为显然您的年份字符串是一年的默认格式。如果以后你想转换,那也很容易。要转换成一年的第一天,就像Joda-Time会给你的那样:

    LocalDate date = year.atDay(1);
    System.out.println(date);
  

2008-01-01

如果您发现以下内容更具可读性,请改用:

    LocalDate date = year.atMonth(Month.JANUARY).atDay(1);

结果是一样的。

如果您从一开始就需要LocalDategreg449’s answer是正确的,您应该使用的那个。

答案 2 :(得分:0)

我没有找到你 但是从标题我认为你想要将一个字符串解析为本地日期,这就是你如何做到这一点

DateTimeFormatter formatter = DateTimeFormatter.ofPattern("d/MM/yyyy");

String date = "16/08/2016";

//convert String to LocalDate
LocalDate localDate = LocalDate.parse(date, formatter);