java 日期計算


    /**
     * 根據起期和期限計算止期
     * @param startDate 起期(格式爲yyyy-MM-dd)
     * @param date 天數或者月數或者年數
     * @param dayOrMonth (傳"day"或者"month"或者"year")
     * @return
     * @throws ParseException
     */
    public static String calculateDate(String startDate, int date, String dayOrMonth) throws ParseException {
        SimpleDateFormat sf = new SimpleDateFormat("yyyy-MM-dd");
        Calendar calendar = Calendar.getInstance();
        calendar.setTime(sf.parse(startDate));
        if ("year".equals(dayOrMonth))
            calendar.add(Calendar.YEAR, date);
        else if ("month".equals(dayOrMonth))
            calendar.add(Calendar.MONTH, date);
        else
            calendar.add(Calendar.DAY_OF_YEAR, date);
        return sf.format(calendar.getTime());
    }

執行:calculateDate("2017-08-20", 2, "month")
結果:2017-10-20


    /**
     * 日期比較
     * @param time1 日期1(格式爲yyyy-MM-dd)
     * @param time2 日期2(格式爲yyyy-MM-dd)
     * @return 日期1在日期2之前 true; 日期1在日期2之前 false 
     * @throws ParseException 
     */
    public static boolean compareDate(String time1, String time2) throws ParseException {
        boolean flag = false;
        SimpleDateFormat df = new SimpleDateFormat("yyyy-MM-dd");
        Date date1 = df.parse(time1);
        Date date2 = df.parse(time2);
        if (date1.before(date2))
            flag = true;
        return flag;
    }

執行:compareDate("2017-01-15", "2017-02-20")
結果:true

方法1:

    /**
     * 判斷當前系統時間是否在當天的6點之後
     * @return true-是  false-否
     */
    private static boolean compareDate(){
        boolean flag = false;
        //當前系統時間
        SimpleDateFormat df = new SimpleDateFormat("yyyy-MM-dd HH:mm:ss");
        String currentDateStr = df.format(new Date());
        String yyyyMMdd = currentDateStr.split(" ")[0];
//      String hour = "";//配置成配置項
//      if (StringUtils.isEmpty(hour)) {
//          hour = "06";
//      } else {
//          hour = hour.replace(" ", "");
//      }
//      int hours;
//      try {
//          hours = Integer.parseInt(hour);
//      } catch (Exception e) {
//          hours = 6;
//      }
//      if(hours < 0 || hours >= 24) hour = "06";
//      String appointDateStr = yyyyMMdd + " " + hour + ":00:00";
//      String HHmmss = "06:00:00"; //配置成配置項
//      SimpleDateFormat df2 = new SimpleDateFormat("HH:mm:ss");
//      try {
//          df2.parse(HHmmss);
//      } catch (ParseException e1) {
//          HHmmss = "06:00:00";
//      }
        String HHmmss = "";
        try {
            SimpleDateFormat sdf = new SimpleDateFormat("HH:mm:ss");
            Calendar calendar  = Calendar.getInstance();
            calendar.set(Calendar.HOUR_OF_DAY, 6);
            calendar.set(Calendar.SECOND, 0);
            calendar.set(Calendar.MINUTE, 0);
            HHmmss = sdf.format(calendar.getTime());
        } catch (Exception e) {
            HHmmss = "06:00:00";
        }
        String appointDateStr = yyyyMMdd + " " + HHmmss;
        try {
            Date currentDate = df.parse(currentDateStr);
            Date appointDate = df.parse(appointDateStr);
            if (currentDate.after(appointDate)) {
                flag = true;
            }
        } catch (ParseException e) {
            //打印日誌:轉換日期異常
        }
        return flag;
    }

方法2:(推薦這種方式)


    /**
     * 判斷當前系統時間是否在當天的6點之後
     * @return true-是  false-否
     */
    private static boolean compareDate(){
        boolean flag = false;
        //當前系統時間
        SimpleDateFormat sdf = new SimpleDateFormat("yyyy-MM-dd HH:mm:ss");
        String currentDateStr = sdf.format(new Date());//當前日期
        try {
            Calendar calendar = Calendar.getInstance();
            calendar.set(Calendar.HOUR_OF_DAY, 6);//配置成配置項
            calendar.set(Calendar.SECOND, 0);//配置成配置項
            calendar.set(Calendar.MINUTE, 0);//配置成配置項
            String appointDateStr = sdf.format(calendar.getTime());//指定日期
            Date currentDate = sdf.parse(currentDateStr);
            Date appointDate = sdf.parse(appointDateStr);
            if (currentDate.after(appointDate)) {
                flag = true;
            }
        } catch (ParseException e) {
            //打印日誌:轉換日期異常
        } catch (Exception e) {
            //打印日誌:轉換日期異常
        }
        return flag;
    }
    /**
     * 當前日期與指定日期相差天數
     */
    private static int days(Date currentDate, Date appointDate) {
        int days = (int) ((currentDate.getTime() - appointDate.getTime()) / (1000*3600*24));
        return days;
    }
    //main方法驗證
    public static void main(String[] args) {
        SimpleDateFormat sdf = new SimpleDateFormat("yyyy-MM-dd HH:mm:ss");
        String appointDateStr = "2012-06-17 00:00:00";
        String currentDateStr = sdf.format(new Date());
        currentDateStr = currentDateStr.split(" ")[0] + " 00:00:00";
        try {
            Date appointDate = sdf.parse(appointDateStr);
            Date currentDate = sdf.parse(currentDateStr);

            int days = days(currentDate, appointDate);
            System.out.println(days);
        } catch (ParseException e) {
            // TODO Auto-generated catch block
            e.printStackTrace();
        }
    }
發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章