的Java DateTimeFormatter不能转换

String str = "Jan 15"; 

DateTimeFormatter formatter = DateTimeFormatter.ofPattern("MMM dd");

LocalDate parsed = LocalDate.parse(str, formatter);

我不断收到此异常:在线程的Java DateTimeFormatter不能转换

异常“主要” java.time.format.DateTimeParseException: 文本“1月15日”不能在指数解析0在 java.time.format.DateTimeFormatter.parseResolved0(DateTimeFormatter.java:1947) 在 java.time.format.DateTimeFormatter.parse(DateTimeFormatter.java:1849) 在java.time.LocalDate.parse(LOCALDATE。 java:400)at com.mach5.T.main(T.java:17)

有人可以帮我吗?

回答:

你可以做到以下几点:

DateTimeFormatter formatter = new DateTimeFormatterBuilder() 

.appendPattern("MMM dd")

.parseDefaulting(ChronoField.YEAR, Year.now(ZoneId.systemDefault()).getValue())

.toFormatter();

LocalDate parsed = LocalDate.parse(str, formatter);

回答:

不能创建一个没有一年LOCALDATE的。

因此,无论你需要添加一个。

 String str = "Jan 15 2016"; 

DateTimeFormatter formatter = DateTimeFormatter.ofPattern("MMM d yyyy", Locale.ENGLISH);

LocalDate parsed = LocalDate.parse(str, formatter);

或者您可以修改格式器填写当前年份,您可以检查this post。

String str = "Jan 15"; 

DateTimeFormatter formatter = new DateTimeFormatterBuilder()

.appendPattern("MMM d")

.parseDefaulting(ChronoField.YEAR, Year.now(ZoneId.systemDefault()).getValue())

.toFormatter(Locale.ENGLISH);;

LocalDate parsed = LocalDate.parse(str, formatter);

回答:

如上所述,您错过了一年以便能够解析LocaleDate。

Java: Unable to obtain LocalDate from TemporalAccessor

实施例:http://tpcg.io/dC93ex

回答:

TL;博士

解析作为MonthDay而非LocalDate

MonthDay.parse( 

"Jan 15" ,

DateTimeFormatter.ofPattern("MMM dd" , Locale.US)

)

--01-15

MonthDay

您输入缺少了一年,所以它不能被解析为一个LocalDate。相反,解析为MonthDay

如果您正在解析代表月份日的字符串,请使用代表月份日值的类。该课程将是MonthDay

DateTimeFormatter f = DateTimeFormatter.ofPattern("MMM dd" , Locale.US) ; 

String input = "Jan 15" ;

MonthDay md = MonthDay.parse(input , f) ;

md.toString():--01-15

即双连字符在所产生的输出串遵循ISO 8601标准,指示一年是未知的/删去。

LocalDate

如果知道的话,您可以一年分配。

LocalDate ld = md.atYear(2017) ; 

ld.toString():2017年1月15日

看到这个code run live at IdeOne.com。


关于java.time

的java.time框架是建立在Java 8和更高版本。这些类取代了日期时间类legacy,如java.util.Date,Calendar,& SimpleDateFormat

Joda-Time项目现在位于maintenance mode,建议迁移到java.time类。请参阅Oracle Tutorial。并搜索堆栈溢出了很多例子和解释。规格是JSR 310。

从何处获取java.time类?

  • Java SE 8,Java SE 9,后来

    • 内置。
    • 带捆绑实现的标准Java API的一部分。
    • Java 9增加了一些次要功能和修复。在ThreeTen-Backport
  • Java SE 6和Java SE 7

    • 大部分的java.time功能后移植到Java 6 & 7。
  • Android

    • ThreeTenABP项目适应ThreeTen-反向移植(上述)为Android特异性。
    • 请参阅How to use ThreeTenABP…

的ThreeTen-Extra项目与其他类扩展java.time。这个项目是未来可能增加java.time的一个试验场。您可以在这里找到一些有用的类,如Interval,YearWeek,YearQuarter和more。

以上是 的Java DateTimeFormatter不能转换 的全部内容, 来源链接: utcz.com/qa/258036.html

回到顶部