關於取每天的00:00:01和23:59:59 的一般處理策略

1.出現背景

這個需求的出現是在項目開發過程中,進行活動時間設置。需要把活動開始當天的第一秒和活動結束當天是最後一秒,作爲一個完整的活動時間。而當時前端傳輸過來的日期格式是 年-月-日(可選擇),時分秒默認當時創建的時間。這是就需要對時分秒進行格式轉換。

2.解決方案

2.1 SimpleDateFormat方案

這是一般對日期進行格式化的方法,可以自定義日期格式,但確實比較low,轉換也比較麻煩,但可以滿足需要。

 public static void main(String[] args) throws ParseException {
        Date date = new Date();
        tranformTime(date);
    }

    private static void tranformTime(Date date) throws ParseException {
        SimpleDateFormat sdf = new SimpleDateFormat("yyyy-MM-dd HH:mm:ss");
        System.out.println("原始時間:"+date);
        SimpleDateFormat sdf1 = new SimpleDateFormat("yyyy-MM-dd 00:00:01");
        SimpleDateFormat sdf2 = new SimpleDateFormat("yyyy-MM-dd 23:59:59");
        String startTimeStr = sdf1.format(date);
        String endTimeStr = sdf2.format(date);

        Date startTime = sdf.parse(startTimeStr);
        Date EndTime = sdf.parse(endTimeStr);
        System.out.println("開始時間:"+startTime);
        System.out.println("結束時間:"+EndTime);

    }

在這裏插入圖片描述

2.2 Calendar方式

Calendar類是一個抽象類,可以爲在某一特定時刻和一組之間的轉換的方法calendar fields如YEAR , MONTH , DAY_OF_MONTH , HOUR ,等等,以及用於操縱該日曆字段,如獲取的日期下個星期。 時間上的瞬間可以用毫秒值表示,該值是從1970年1月1日00:00 00:00.000 GMT(Gregorian)的Epoch的偏移量。 該類還提供了用於在包外部實現具體日曆系統的其他字段和方法。 這些字段和方法定義爲protected 。 (來自API)

public static void main(String[] args) throws ParseException {
        Date date = new Date();
        System.out.println("原始時間:"+date);
        System.out.println("開始時間:"+getDateMin(date));
        System.out.println("結束時間:"+getDateMaxDB(date));

    }

    public static Date getDateMin(Date date) {
        if(date==null) {
            return date;
        }
        Calendar c = Calendar.getInstance();
        c.setTime(date);
        c.set(Calendar.HOUR_OF_DAY, 0);
        c.set(Calendar.MINUTE, 0);
        c.set(Calendar.SECOND, 1);
        c.set(Calendar.MILLISECOND, 0);
        return c.getTime();
    }
    /**
     * 獲取某天的最大時間
     * @param date
     * @return
     */
    public static Date getDateMaxDB(Date date) {
        if(date==null) {
            return date;
        }
        Calendar c = Calendar.getInstance();
        c.setTime(date);
        c.set(Calendar.HOUR_OF_DAY, 23);
        c.set(Calendar.MINUTE, 59);
        c.set(Calendar.SECOND, 59);
        c.set(Calendar.MILLISECOND, 0);
        return c.getTime();
    }

在這裏插入圖片描述
注意:當需要把處理好的日期插入到數據庫時,需要把c.set(Calendar.MILLISECOND, 0);毫秒值設置爲0或500以下,因爲mysql在進行處理的時候會把大於500毫秒的數據自動加1。

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章