最近工作中碰到個新需求,計算每個員工入職公司的時長,要求形式為多少年多少月多少天形式,某個值為0就跳過不顯示,因為前段時間學習過java8新特性,對於這個需求,java8的新時間日期API可以直接解決:
不得不感嘆java8的強大,但是很遺憾,項目的服務端使用的jdk仍然是1.7(汗......java10都發布了),所以還是得自己動手來,剛開始使用的是日歷API方式,通過加減計算,得出的結果,參考了百度的答案,如下圖:
,
但是后來測試發現這種方式有很大的問題,計算的值不僅可能為0,還有可能為負數,當然是不行了,於是繼續百度,后來想到了commons組件,於是使用這個組件就輕而易舉解決了這個問題:
,
使用Apache的commons的long包下面的DurationFormatUtils工具類的formatPeriod方法,可以完美解決這個問題,然后就是返回字符了,因為考慮到各種為0不顯示的業務邏輯,所以一開始無腦的加了很多ifelse判斷,
后來果斷被項目組長鄙視,然后直接用StringBuffer來處理,不多說了.直接貼改進的代碼:
這樣處理起來就特別方便了!