今天要來講述如何以陣列輸出遞減or遞增時間的方法

這是在我工作中用到的,也不知道各位有沒有機會用到

但如果能對大家有所幫助是我最開心的事

首先po程式碼

/**取得時間陣列*/
    public static  ArrayList<String> getTimeArray(String date,String time,int inter,int arrayLength){
        try {
            //輸入時間HHmmss
            //輸入日期yyMMdd
            //輸入間隔12345
            //輸入要輸出多少筆資料
            ArrayList<String> returnArray = new ArrayList<>();
            String startDate = date;
            String startTime = time;
            SimpleDateFormat sdf = new SimpleDateFormat("yyyy-MM-dd HH:mm:ss");
            String s = "20"+startDate.substring(0,2)
                    +"-"+startDate.substring(2,4)
                    +"-"+startDate.substring(4,6)+" "+startTime.substring(0,2)
                    +":"+startTime.substring(2,4)
                    +":"+startTime.substring(4,6);

            Date dt =null;

            dt = sdf.parse(s);

            String newTime = sdf.format(dt);
            returnArray.add(newTime);
            for (int i = 0;i<arrayLength;i++){
                Date d = null;
                try {
                    d = sdf.parse(returnArray.get(i));
                } catch (ParseException e) {
                    e.printStackTrace();
                }
                Calendar now = Calendar.getInstance();
                now.setTime(d);
                now.add(Calendar.SECOND,inter);
                Date dt2 = now.getTime();
                returnArray.add(sdf.format(dt2));
            }
            return returnArray;
        } catch (ParseException e) {
            ArrayList<String> returnArray = new ArrayList<>();
            returnArray.add("輸入錯誤"+e.getMessage());
            return returnArray;
        }catch (StringIndexOutOfBoundsException e){
            ArrayList<String> returnArray = new ArrayList<>();
            returnArray.add("輸入錯誤"+e.getMessage());
            return returnArray;
        }catch (Exception e){
            ArrayList<String> returnArray = new ArrayList<>();
            returnArray.add("輸入錯誤"+e.getMessage());
            return returnArray;
        }
    }

基本上這是個懶人包,直接複製進程式就可以了

再來探討一下輸入,必須輸入四個參數

  1.  String: 日期格式。Ex:2020/01/28->"200128"
  2. String: 時間格式。Ex:16:23:45->"162345"
  3. int: 時間間隔(秒)。Ex:每一小時遞增-> 3600 (備註:輸入負號則為遞減)
  4. int: 要輸出幾筆。Ex:想輸出10筆-> 10

補充:第一筆是現在(指定)時間,因此最終會多一筆

實測

 

輸入:(時間遞減)

System.out.println(getTimeArray("200125","151609",-15400,5));

輸出:

[2020-01-25 15:16:09
, 2020-01-25 10:59:29
, 2020-01-25 06:42:49
, 2020-01-25 02:26:09
, 2020-01-24 22:09:29
, 2020-01-24 17:52:49]

輸入:(時間遞增+跨日)

System.out.println(getTimeArray("191225","120000",3600,20));

輸出:

[2019-12-25 12:00:00
, 2019-12-25 13:00:00
, 2019-12-25 14:00:00
, 2019-12-25 15:00:00
, 2019-12-25 16:00:00
, 2019-12-25 17:00:00
, 2019-12-25 18:00:00
, 2019-12-25 19:00:00
, 2019-12-25 20:00:00
, 2019-12-25 21:00:00
, 2019-12-25 22:00:00
, 2019-12-25 23:00:00
, 2019-12-26 00:00:00
, 2019-12-26 01:00:00
, 2019-12-26 02:00:00
, 2019-12-26 03:00:00
, 2019-12-26 04:00:00
, 2019-12-26 05:00:00
, 2019-12-26 06:00:00
, 2019-12-26 07:00:00
, 2019-12-26 08:00:00]

輸入:(時間遞增+跨年)

System.out.println(getTimeArray("191225","132536",31536000,4));

輸出:

[2019-12-25 13:25:36
, 2020-12-24 13:25:36
, 2021-12-24 13:25:36
, 2022-12-24 13:25:36
, 2023-12-24 13:25:36]

 

只是需要抄或者立刻使用的到這裡就ok了,橫線後講述程式碼


再來講述一下原理

public static  ArrayList<String> getTimeArray(String date,String time,int inter,int arrayLength){
        try {
            //輸入時間HHmmss
            //輸入日期yyMMdd
            //輸入間隔12345
            //輸入要輸出多少筆資料
            ArrayList<String> returnArray = new ArrayList<>();
            String startDate = date;
            String startTime = time;
            SimpleDateFormat sdf = new SimpleDateFormat("yyyy-MM-dd HH:mm:ss");
            String s = "20"+startDate.substring(0,2)
                    +"-"+startDate.substring(2,4)
                    +"-"+startDate.substring(4,6)+" "+startTime.substring(0,2)
                    +":"+startTime.substring(2,4)
                    +":"+startTime.substring(4,6);

            Date dt =null;

            dt = sdf.parse(s);

            String newTime = sdf.format(dt);
            returnArray.add(newTime);

            for (int i = 0;i<arrayLength;i++){
                Date d = null;
                try {
                    d = sdf.parse(returnArray.get(i));
                } catch (ParseException e) {
                    e.printStackTrace();
                }
                Calendar now = Calendar.getInstance();
                now.setTime(d);
                now.add(Calendar.SECOND,inter);
                Date dt2 = now.getTime();
                returnArray.add(sdf.format(dt2));
            }
            return returnArray;
        } catch (ParseException e) {
            ArrayList<String> returnArray = new ArrayList<>();
            returnArray.add("輸入錯誤"+e.getMessage());
            return returnArray;
        }catch (StringIndexOutOfBoundsException e){
            ArrayList<String> returnArray = new ArrayList<>();
            returnArray.add("輸入錯誤"+e.getMessage());
            return returnArray;
        }catch (Exception e){
            ArrayList<String> returnArray = new ArrayList<>();
            returnArray.add("輸入錯誤"+e.getMessage());
            return returnArray;
        }
    }

首先是擷取字串的部分,因為我在工作的項目中後端給我的是yyMMdd的一個格式,因此才這樣做

紅色部分擷取完字串後,接著將取得的值送至藍色的部分

以SimpleDateFormat轉換為日期格式後,送至Date內,並命令為現在時間

最後將這筆時間,加入至陣列第一號(index = 0)

 

綠色部分則為開始加入遞減數值,其順序為

  1. (橘底)取得陣列中上一個值//備註:因為上一個值就是現在時間,因此不加入現在時間的話會崩潰
  2. (粉底)以Calender格式將取得值設為現在時間,並且在粉底第三行做增減
  3. (底線)將取得值存進Date,並設為現在時間後,存入ArrayList
  4. 迴圈再次取得剛剛放進去的值,並重複至迴圈結束

最後catch就是為防止程式閃退設置,我試著輸入過超乎60秒或者第13月份,程式會自動進位沒有問題

那麼,以上解釋,感謝點閱~

 

 

arrow
arrow

    碼農日常 發表在 痞客邦 留言(1) 人氣()