String str = "Jan 15";
DateTimeFormatter formatter = DateTimeFormatter.ofPattern("MMM dd");
LocalDate parsed = LocalDate.parse(str, formatter);
我一直得到这个例外:
线程“main”中的异常java.time.format.DateTimeParseException: 文本'Jan 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)
有人可以帮助我吗?
答案 0 :(得分:2)
解析为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-01-15
请参阅此code run live at IdeOne.com。
java.time框架内置于Java 8及更高版本中。这些类取代了麻烦的旧legacy日期时间类,例如java.util.Date
,Calendar
和& SimpleDateFormat
现在位于Joda-Time的maintenance mode项目建议迁移到java.time类。
要了解详情,请参阅Oracle Tutorial。并搜索Stack Overflow以获取许多示例和解释。规范是JSR 310。
从哪里获取java.time类?
ThreeTen-Extra项目使用其他类扩展java.time。该项目是未来可能添加到java.time的试验场。您可以在此处找到一些有用的课程,例如Interval
,YearWeek
,YearQuarter
和more。
答案 1 :(得分:1)
您可以执行以下操作:
DateTimeFormatter formatter = new DateTimeFormatterBuilder()
.appendPattern("MMM dd")
.parseDefaulting(ChronoField.YEAR, Year.now(ZoneId.systemDefault()).getValue())
.toFormatter();
LocalDate parsed = LocalDate.parse(str, formatter);
答案 2 :(得分:1)
如果没有一年,您无法创建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);
答案 3 :(得分:1)
如上所述,您错过了这一年,以便能够解析LocaleDate。