开发途中,走过的路,踩过的坑
今天在此立个项,记录容易忽视的、但不可小觑的问题。
1.SimpleDateFormat
这个大家常用,但是要注意格式化时,yyyy与YYYY是不同的。
yyyy表示当天所在的年,YYYY表示当天所在的周(week)所属于的年份,一般周日开始,周六结束。只要本周跨年,返回的YYYY就是下一年。
一方面,我们开发人员要注意,另一方面,作为管理者,要从流程上防止类似问题。
什么叫从流程上防止?人是不可靠的,会犯错。我们可以借用代码检查工具(如sonar工具或是其它插件),将SimpleDateFormat的规则添加功自动扫描代码规则中,方舟子问题发生。
1 public class SimpleDateFormatDemo { 2 public static void main(String args[]){ 3 Date date = new Date(123,11,31); 4 SimpleDateFormat formatter = new SimpleDateFormat("YYYY-MM-dd HH:mm:ss"); 5 String strDate= formatter.format(date); 6 System.out.println("YYYY-MM-dd HH:mm:ss " + strDate); 7 8 Date date2 = new Date(123,11,31); 9 SimpleDateFormat formatter2 = new SimpleDateFormat("yyyy-MM-dd HH:mm:ss"); 10 String strDate2= formatter2.format(date2); 11 System.out.println("yyyy-MM-dd HH:mm:ss " + strDate2); 12 } 13 }
2.跑批
测试跑批任务时,一定要验证跑批中断后,再启动的场景。
因为这时,之前没跑完的数据如何处理。这里,往往是大家容易忽视,有可能会造成数据的重复处理或是漏处理的现象。
3.数字运算尽量用BigDecimal
金融领域,跟数字打交道,对数字敏感,推荐使用BigDecimal。Demo如下。
公司里,有人判断金额时,仅安字符判断“0”或空,而实际的表中存在“0.00”的情况,导致引发业务逻辑的问题。需要引起大家的注意。
1 public class BigDecimalDemo { 2 3 public static void main(String args[]){ 4 double a=0.03; 5 double b=0.04; 6 double c=b-a; 7 System.out.println(c); 8 //Output :0.009999999999999998 9 10 BigDecimal _a = new BigDecimal("0.03"); 11 BigDecimal _b = new BigDecimal("0.04"); 12 BigDecimal _c = _b.subtract(_a); 13 System.out.println(_c); 14 // Output :0.01 15 16 BigDecimal _d = new BigDecimal("0.00"); 17 BigDecimal _e = new BigDecimal("0.0"); 18 BigDecimal _f = new BigDecimal("0"); 19 20 if (_d.compareTo(_e) == 0) { 21 System.out.println("_d equals _e"); 22 } 23 if (_d.compareTo(_f) == 0) { 24 System.out.println("_d equals _f"); 25 } 26 } 27 }
未完待续...后续会继续补充
努力到无能为力,奋斗到感动上天!