我正在从外部数据源检索日期/时间,这将以下列格式“5月5日星期六4:30”返回,没有年份.
我一直试图将此解析为LocalDateTime失败.返回的数据不会返回一年,因为我们假设我们一直在当年运营.
//date to parse String time = "14:30 Sat 05 May"; //specify date format matching above string DateTimeFormatter formatter = DateTimeFormatter.ofPattern("HH:mm E d MMM YYYY") ; //we do not have a year returned but i can make the assumption we use the current year LocalDateTime formatDateTime = LocalDateTime.parse(time,formatter).withYear(2018);
上面的代码抛出以下异常
线程“main”中的异常java.time.format.DateTimeParseException:Text ’14:30 Sat 05 May’无法在索引16处解析
任何帮助赞赏.
解决方法
LocalDateTime.parse()需要一个表示有效日期的String,即年份部分.
以这种方式调用此方法后,您无法设置年份:
以这种方式调用此方法后,您无法设置年份:
LocalDateTime.parse(time,formatter).withYear(2018);
必须先设置年份,否则parse()会抛出DateTimeParseException.
作为一种解决方法,您可以在输入中连接当前年份.
一些额外的说明:
>您使用的模式和文本格式的输入日期不完全匹配.
>您没有为解析操作指定区域设置.
这意味着它将根据运行JVM的本地工作.
要确保它在任何情况下都有效,您应该指定Locale.
所以你可以尝试这样的事情:
//date to parse String time = "14:30 Sat 05 May"; time += " " + LocalDate.Now().getYear(); //specify date format matching above string DateTimeFormatter formatter = DateTimeFormatter.ofPattern("HH:mm EEE dd MMM yyyy",Locale.US) ; //we do not have a year returned but i can make the assumption we use the current year LocalDateTime formatDateTime = LocalDateTime.parse(time,formatter);