11

使用 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

有没有其他选择,而不是专门写 sth like

LocalDate.ofYearDay(Integer.valueOf("2008"), 1)

?

4

3 回答 3

19

LocalDate解析需要指定所有的年、月和日。

DateTimeFormatterBuilder您可以使用 a和使用以下方法指定月份和日期的默认值parseDefaulting

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

LocalDate.parse("2008", format);
于 2016-12-28T09:02:05.263 回答
7
    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);

结果是一样的。

如果你LocalDate从一开始就需要一个,greg449 的答案是正确的,也是你应该使用的。

于 2018-04-29T04:33:28.290 回答
0

我没有得到你,但从标题我认为你想将一个字符串解析为一个本地日期,所以这就是你的做法

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

String date = "16/08/2016";

//convert String to LocalDate
LocalDate localDate = LocalDate.parse(date, formatter);
于 2016-12-28T08:28:33.077 回答