开发途中,走过的路,踩过的坑

今天在此立个项,记录容易忽视的、但不可小觑的问题。

 

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 }

 

 

 

 

未完待续...后续会继续补充

posted @ 2024-01-29 23:09  Mr.袋鼠  阅读(5)  评论(0编辑  收藏  举报