1. 使用 Long.parse() 时报错
项目重构,测试报出错误 For input string: "100.00"
。因为日志只打印了报错的 message, 没有打印异常类型,看上去有点摸不着头脑。初步分析日志,大致猜测是解析时出了问题,此后使用以下代码本地重现了该问题
String a = "100.0";
Long b = Long.parse(a);
报错 java.lang.NumberFormatException: For input string: "100.00"
显而易见,就是数字解析的时候出现异常。Long 是整形,parse 的数字字符串必须是整形,而被解析的字符串带上了小数点,故解析时抛出了异常
对于这个错误,可以先把 a = "100.0" 使用精度更高的Double或BigDecimal来 parse, 之后取其 Long 值即可
2. YYYY-MM-dd 造成的日期错误
最近遇到个日期格式化的问题,在 Java 中使用以下代码格式化当前时间 2019-12-30
的时候发现最终拿到的字符串是2020-12-30
,问题是显而易见的。查找资料,最终发现该问题和日期格式化的 Pattern
模式有关,大写的 Y
代表的是 week year
,即当天所在的周属于的年份,一周从周日开始,周六结束,只要本周跨年,那么这周就算入下一年,2019-12-30
被算入了下一年的第一周,故年份变成了 2020 年。要解决这个问题,只要将Pattern
模式修改为 yyyy-MM-dd
即可
LocalDate localDate = LocalDate.now();
DateTimeFormatter yyyymMdd = DateTimeFormatter.ofPattern("YYYY-MM-dd");
String format = yyyymMdd.format(localDate);