我有一个日期不断给我一个错误
AvroInputFormat<User> users = new AvroInputFormat<User>(in, User.class);
DataSet<User> usersDS = env.createInput(users);
所有其他日期(没有单词月份)正常工作
我正在使用的代码如下:
java.text.ParseException: Unparseable date: " 5 April 2017 "
答案 0 :(得分:3)
很高兴看到您对现代日期和时间课程表达的兴趣,这里只是一个让您入门的片段:
String visitDate = " 5 April 2017 ";
DateTimeFormatter parseFormatter
= DateTimeFormatter.ofPattern("d MMMM uuuu", Locale.UK);
visitDate = visitDate.trim();
LocalDate date = LocalDate.parse(visitDate, parseFormatter);
// reformat to the string we like
DateTimeFormatter formatter = DateTimeFormatter.ofPattern("dd_MM_uu");
visitDate = date.format(formatter);
结果是
05_04_17
由于Java编码约定建议变量名称以小写字母开头,因此我使用小v拼写visitDate
。
uu
很微妙,可能是你可以忽略的东西。这是一个签名的年份,0等于1 BC,-1等于2 BC等等。假设您的日期都没有,那么您可以互换使用u
和y
。
我相信SimpleDateFormat.format()
和LocalDate.format()
都不会返回null,所以所有的空检查都是多余的。
进一步阅读的链接:Oracle tutorial: Trail: Date Time
答案 1 :(得分:0)
您只有一个SimpleDateFormatter用于解析:
SimpleDateFormat changeDate = new SimpleDateFormat("dd_MMM_yy", Locale.UK);
//Convert the string to a date
Date date = changeDate.parse(VisitDate);
它使用格式dd_MMM_yy
,但是你传递了4位数字。
其余的SimpleDateFormatters用于格式化为字符串,而不是从字符串解析。只会调用第一个,因为它将能够生成给定有效日期的字符串,并且以下空值检查将阻止使用任何其他格式化程序。
答案 2 :(得分:-1)
您要解析输入字符串,如下所示:" 5 April 2017 "
。但是这个输入没有模式匹配
首先请修剪输入字符串的空格
第二,请更改字符串的格式或添加其他模式以解析此字符串,因为您的月份April
包含5个字母,但您没有使用MMMMM
的模式。通常月份将缩短为3个字母,如:April - &gt; 4月,3月 - &gt; Mar ...