使用 SimpleDateFormat, Calendar — 計算兩個日期間的天數

York
2 min readJul 2, 2018

--

有時候我們從後端得到日期的字串後,需要計算不同日期之間的天數,這種時候就要使用 SimpleDateFormat 搭配 Gson 的 JsonDeserializer 將字串轉成 Date object,再使用這個物件做想要的事,譬如計算兩個特定日期間的天數之類的。轉換的概念與過程非常簡單,我們直接開始吧!

首先我們需要先了解一下 SimpleDateFormat ,這個類別能專門用來產生特定格式的日期。特別需要注意的地方在於傳入 SimpleDateFormat 建構子的字串大小寫格式是固定的,依照年、月、日、時、分、秒 來建立預期格式的字串,譬如:

yyyy-MM-dd HH:mm:ss

另外傳入的字串不能有多餘的部分,例如我只要年月日的話,格式便為 yyyy-MM-dd,傳入的字串便要是 2018–06–09,不能有

假設有一個情境是要計算今天距離某個活動的日期還有多少天,那我們可以建立一個 CalculatePeriod class 專門來做這件事。藉由 getPeriodToDate(date, time) 能得到從今日起到某一天之間相隔的天數。假設 date 要傳入的字串為活動當天的日期 2018/07/04,time 的字串格式為 活動當天的時間 20:30 ,我們要將兩個字串合再一起並傳入自己建立的 DateDeserizlizer class,由這個類別負責將傳入的日期時間字串轉換成代表特定日期的 Date object。再來呼叫 Calendar.getInstance() 建立 Calendar object ,使用 calendar.time 取得目前時間的 Date object。如此得到活動當天即今日的兩個物件之後,使用 Date.getTIme() 取得從 1970 年 1月 1 日開始算起的總毫秒數,將兩個日期的毫秒數相減再換算成天數就完成了!

CalculatePeriod Class
DateDeserializer Class

--

--