的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