加入收藏 | 设为首页 | 会员中心 | 我要投稿 李大同 (https://www.lidatong.com.cn/)- 科技、建站、经验、云计算、5G、大数据,站长网!
当前位置: 首页 > 编程开发 > Java > 正文

java – 无法使用“HH:mm E d MMM YYYY”模式解析DateTimeForma

发布时间:2020-12-15 08:26:04 所属栏目:Java 来源:网络整理
导读:我正在从外部数据源检索日期/时间,这将以下列格式“5月5日星期六4:30”返回,没有年份. 我一直试图将此解析为LocalDateTime失败.返回的数据不会返回一年,因为我们假设我们一直在当年运营. //date to parseString time = "14:30 Sat 05 May";//specify date fo
我正在从外部数据源检索日期/时间,这将以下列格式“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);

(编辑:李大同)

【声明】本站内容均来自网络,其相关言论仅代表作者个人观点,不代表本站立场。若无意侵犯到您的权利,请及时与联系站长删除相关内容!

    推荐文章
      热点阅读