PDF 课件和源代码下载地址:
https://github.com/geektime-geekbang/LetsJava
作者回复: 囧,敲了半天本来想编辑,结果手一抖给删了。
是这样的,我原封不动的用你给的format的日期字符串,解析也没有错误。我试过JDK8和11,都么有问题。
但是我点进去SimpleDateFormat的parse方法,它报错的地方的源代码如下:
ParsePosition pos = new ParsePosition(0);
Date result = parse(source, pos);
if (pos.index == 0)
throw new ParseException("Unparseable date: \"" + source + "\"" ,
pos.errorIndex);
return result;
抛出错误的地方,有个pos.errorIndex告诉了是解析到哪个字符出错了。这个很有用,但是异常的message里却没有给出来这个信息。我也是服气了。
建议你在linux服务器上catch住这个exception,人肉输出异常的errorOffset属性,再结合format和date字符串,就很容易判断是哪里不匹配了。
我的一个猜测是空格的问题。
“MMM d,yyyy hh:mm:ss a z”可以匹配你给的日期字符串,但是如果d和yyyy之间多一个空格,而日期字符串没有空格,就会出错,也就是“MMM d, yyyy hh:mm:ss a z”无法解析“May 1,2019 12:27:07 AM PDT”。
你结合exception的errorOffset看一下吧,盯准空格别漏了。
作者回复: 收到,这也是第二篇的一个变化,就是把语法点都放在代码里而不是PPT里。好处是语法的解释直接以注释的方式放在代码上,更直观,减少了代码和PPT之间的切换。但是有时候就会感觉比较乱,尤其是一个语法点涉及多个地方的代码的时候。一方面建议你根据代码里的// >> TODO个格式的语法点自己再复习一边语法,另一方面,我会注意讲一个语法完整的讲解,而非跟着代码跳着讲。谢谢
作者回复: 滴, 学生卡.