Warning: file_get_contents(/data/phpspider/zhask/data//catemap/8/api/5.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Java 8 使用Java8将年份字符串解析为LocalDate_Java 8_Jodatime_Localdate - Fatal编程技术网

Java 8 使用Java8将年份字符串解析为LocalDate

Java 8 使用Java8将年份字符串解析为LocalDate,java-8,jodatime,localdate,Java 8,Jodatime,Localdate,有了Joda library,你可以 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

有了Joda library,你可以

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)
我没听懂你的话 但是从标题来看,我认为您需要将字符串解析为localdate,所以这就是您的方法

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

String date = "16/08/2016";

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

LocalDate
解析要求指定所有年份、月份和日期

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

DateTimeFormatter format=new DateTimeFormatterBuilder()
.appendPattern(“yyyy”)
.parseDefaulting(ChronoField.MONTH\u/u年,1)
.parseDefaulting(ChronoField.DAY\u/u月,1)
.toFormatter();
parse(“2008”,格式);
输出:

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
,它是正确的,并且是您应该使用的。

我的问题是关于解析一年的。我展示了一个使用Joda time的工作示例,但要求使用类似的方法使其能够使用java8(不使用Joda time)。基本上,我是在问为什么在Java8中解析一个仅限年份的字符串到LocalDate不起作用。你能发布代码来检查它为什么不起作用吗!编辑以显示异常。也许答案是,在这种情况下,Joda时间需要一年中的第一天,但是java8抛出了一个异常,因为它缺少创建LocalDate的数据。我很同意,如果有人能确认这是你想要的行为……写下你自己的方法?
    LocalDate date = year.atMonth(Month.JANUARY).atDay(1);