微信公众号搜"智元新知"关注
微信扫一扫可直接关注哦!

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

我正在从外部数据源检索日期/时间,这将以下列格式“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);

版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 dio@foxmail.com 举报,一经查实,本站将立刻删除。

相关推荐