自定义日期解析方法抛出ParseException:无法解析日期的原因排查
问题分析与解决方案
嘿,这个问题很典型,咱们一步步拆解来看:
核心问题:解析格式与输入日期不匹配
你传入的日期字符串是"2019-03-05 06:15:00",但代码中负责解析的SimpleDateFormat使用的格式是"yyyy-MM-dd'T'HH:mm'Z'"——这个格式对输入有严格要求:
- 日期和时间之间必须用
T分隔 - 时间部分只能到分钟,且结尾必须带有
Z(代表UTC时区)
而你的输入是用空格分隔日期和时间、包含秒数且没有Z的格式,完全不匹配解析规则,这就是抛出ParseException的直接原因。
次要问题:格式化格式的参数误用
代码中用来格式化日期的格式是"yyyy-MM-dd HH:mm:SS",这里的SS是代表毫秒的占位符,而你输入的最后两位00是秒数。如果想要正确表示秒,应该使用小写的ss,大写的SS会把秒数错误地解析为毫秒,导致最终生成的日期字符串不符合预期。
修正后的代码
public String convertDate(String val) throws ParseException { // 匹配输入的日期格式:yyyy-MM-dd HH:mm:ss SimpleDateFormat inputFormat = new SimpleDateFormat("yyyy-MM-dd HH:mm:ss"); // 格式化时用ss表示秒(如果需要毫秒再用SS) SimpleDateFormat outputFormat = new SimpleDateFormat("yyyy-MM-dd HH:mm:ss"); return "cast('" + outputFormat.format(inputFormat.parse(val)) + "' as ts)"; }
补充说明:如果你的实际需求是要处理带
T和Z的UTC日期格式,那需要确保传入的参数符合yyyy-MM-dd'T'HH:mm'Z'的规则,比如"2019-03-05T06:15Z",但根据当前报错场景,显然是输入格式和解析格式不匹配导致的问题。
内容的提问来源于stack exchange,提问作者samba
相关产品推荐
相关产品推荐

