Java基礎 - 時間函數Date的相關使用


前言:

  在日常Java開發中,常常會使用到Date的相關操作,如:獲取當前系統時間、獲取當前時間戳、時間戳按指定格式轉換成時間等。以前用到的時候,大部分是去網上找,但事后又很快忘記。現為方便自己今后查閱,也方便各位猿友學習探討,在此將我們常用的時間實例、函數歸納羅列出來,供大家參考,如有不對,歡迎在評論區共同探討。

1、獲取系統當前時間

  獲取系統當前時間,我們經常會用到,如:判斷優惠券是否已經過期、更新某條數據的時間等。(當然,這些也可以在sql中進行)

 方法一:

  Date類對象是用來表示時間和日期的,這個類提供了一系列操作時間和日期的函數,獲取系統當前時間就是我們最常用的。如下:

 1 public static void main(String[] args) {
 2     SimpleDateFormat dateFormat = new SimpleDateFormat("yyyy-MM-dd hh:mm:ss");
 3     SimpleDateFormat dateForm24 = new SimpleDateFormat("yyyy-MM-dd HH:mm:ss");
 4     Date date1 = new Date();
 5     System.out.println("系統當前時間是(未格式化):" + date1);
 6     System.out.println("系統當前時間是(已格式化):" + dateFormat.format(date1));
 7     System.out.println("系統當前時間是(格式-24):" + dateForm24.format(date1));
 8 }
 9 控制台輸出:
10 系統當前時間是(未格式化):Fri Dec 27 16:43:47 CST 2019
11 系統當前時間是(已格式化):2019-12-27 04:43:47
12 系統當前時間是(格式-24):2019-12-27 16:43:47

  從控制台輸出,我們可以看到,同一個時間有三種表達樣式。這里解釋一下,第一種是格林威治時間格式,這通常不是我們想要的結果,所以引入了后兩種。

  后兩種我們使用了時間日期格式化類(SimpleDateFormat)來把時間格式化成我們想要的樣式。這里需要注意的是,后兩種在“小時”的樣式上略有不同,小寫的“hh”表示12小時制,大寫的“HH”則為24小時制,我們使用時可根據需求而定。

 方法二:

  除了Date類,我們還經常使用Calendar類來操作時間和日期,我們可以把它看做是Date類的增強版,因為Calendar類提供了一組方法,允許將一個以毫秒為單位的時間轉換成年、月、日、時、分、秒、星期等。我們可以把Calendar類看做是萬年歷,默認顯示的是當時間,同時也可以查看其他時間。如下:(其實,Calendar底層也是通過new Date() 獲取Date實例)

 1 public static void main(String[] args) {
 2     SimpleDateFormat dateFormat = new SimpleDateFormat("yyyy-MM-dd HH:mm:ss");
 3     Calendar calendar = Calendar.getInstance();
 4     Date date2 = calendar.getTime();
 5     System.out.println("系統當前時間是:" + dateFormat.format(date2));
 6     //還可以使用[年月日 時分秒]拼接的方式獲取;
 7     int year        = calendar.get(Calendar.YEAR);          //
 8     int month       = calendar.get(Calendar.MONTH)+1;       //月(從0開始,故要+1):11
 9     //星期幾:先判斷一周的第一天是不是星期天;如果是,則-1;
10     int dayOfWeek   = calendar.getFirstDayOfWeek()==Calendar.SUNDAY?calendar.get(Calendar.DAY_OF_WEEK)-1:calendar.get(Calendar.DAY_OF_WEEK);
11     int dayOfYear   = calendar.get(Calendar.DAY_OF_YEAR);   //日(年的第N日)
12     int dayOfMonth  = calendar.get(Calendar.DAY_OF_MONTH);  //日(月的第N日)
13     int day         = calendar.get(Calendar.DATE);          //日(同上)
14     int hourOfDay   = calendar.get(Calendar.HOUR_OF_DAY);   //時(24小時制)
15     int hour        = calendar.get(Calendar.HOUR);          //時(12小時制)
16     int minute      = calendar.get(Calendar.MINUTE);        //
17     int second      = calendar.get(Calendar.SECOND);        //
18     int millisecond = calendar.get(Calendar.MILLISECOND);
19     System.out.println("現在是:"+year+"年"+month+"月"+day+"日"
20             +hourOfDay+"點("+hour+"點)"+minute+"分"+second+"秒"+millisecond
21             +"毫秒,星期"+dayOfWeek+",這是"+year+"年的第"+dayOfYear+"天.");
22 }
23 
24 控制台輸出:
25     系統當前時間是:2019-12-27 17:16:17
26     現在是:2019年12月27日17點(5點)16分17秒94毫秒,星期5,這是2019年的第361天.

  這里有兩個地方需要注意:

  1、獲取月份:int month = calendar.get(Calendar.MONTH)+1; 直接獲取到的月份默認是從0開始的,即當前12月獲取到的是11,所以這里要 +1;

  2、獲取星期:上面我用了個三元,拆開來就是要比較【一周的第一天是不是周日】。

 1 //int dayOfWeek   = calendar.getFirstDayOfWeek()==Calendar.SUNDAY?calendar.get(Calendar.DAY_OF_WEEK)-1:calendar.get(Calendar.DAY_OF_WEEK);
 2 //當前星期幾
 3 int dayOfWeek   = calendar.get(Calendar.DAY_OF_WEEK);
 4 //一周的第一天
 5 int firstDayOfWeek = calendar.getFirstDayOfWeek();
 6 //星期日
 7 int sunday = Calendar.SUNDAY; 
 8 //如果一周的第一天是星期日,則需要-1;
 9 if (firstDayOfWeek==sunday){
10     dayOfWeek --;
11 }
12 System.err.println("今天是星期" + dayOfWeek);

 方法三:

  除了直接獲取時間,我們還可以通過獲取當前時間的毫秒值,然后再轉換成時間。

 1 public static void main(String[] args) {
 2     SimpleDateFormat dateFormat = new SimpleDateFormat("yyyy-MM-dd HH:mm:ss");
 3     long nowLong=System.currentTimeMillis();   //獲取出來的是當前時間的毫秒值
 4     //把毫秒值轉換成時間格式
 5     Date date = new Date();
 6     date.setTime(nowLong);
 7     System.out.println("系統當前時間是:" + dateFormat.format(date));
 8 }
 9 //控制台輸出:
10 //    系統當前時間是:2019-12-27 18:00:00 --->這是什么意思???????

  Tip:以上就是獲取系統當前時間的三種方式,各位大佬有其他更好的方式,歡迎評論區補充。

2、獲取當前時間的前一天/后一天

  Tip:通過觀察可以發現,前一天和后一天只是修改了 -1 和 +1 這兩個值。

private static void getYesterday() {
    //獲取前一天的時間
    SimpleDateFormat format = new SimpleDateFormat("yyyy-MM-dd HH:mm:ss");
    Date date = new Date();
    Calendar calendar = Calendar.getInstance();
    calendar.setTime(date);
    calendar.add(Calendar.DAY_OF_MONTH, -1);
    date = calendar.getTime();
    System.out.println("當前時間是:" + (format.format(new Date())) + ",昨天是:" + (format.format(date)));
    //>>>> 當前時間是:2020-06-23 14:53:15,昨天是:2020-06-22 14:53:15
}

private static void geTomorrow() {
    //獲取前一天的時間
    SimpleDateFormat format = new SimpleDateFormat("yyyy-MM-dd HH:mm:ss");
    Date date = new Date();
    Calendar calendar = Calendar.getInstance();
    calendar.setTime(date);
    calendar.add(Calendar.DAY_OF_MONTH, +1);
    date = calendar.getTime();
    System.out.println("當前時間是:" + (format.format(new Date())) + ",明天是:" + (format.format(date)));
    //>>>> 當前時間是:2020-06-23 14:53:15,明天是:2020-06-24 14:53:15
}

3、獲取某個時間的整點時間

  要獲取某個時間的整點時間,主要在使用格式的時候,把格式設置為 HH:00:00 ;

private static void getHour() throws ParseException {
    //獲取某個時間的整點時間;
    Date date = new Date();

    SimpleDateFormat sdf = new SimpleDateFormat("yyyy-MM-dd HH:mm:ss");
    String dateStr = sdf.format(date);

    //獲取整點時間,主要是使用這個 HH:00:00 的時間格式;
    SimpleDateFormat hourFormatter = new SimpleDateFormat( "yyyy-MM-dd HH:00:00");
    String hourStr = hourFormatter.format(date);

    System.out.println("當前時間是:" + dateStr + ",整點時間是:" + hourStr);
    //>>>> 當前時間是:2020-06-23 14:50:22,整點時間是:2020-06-23 14:00:00
}

4、獲取某個時間的前(后)一個小時

private static void getOneHourAgo() throws ParseException {
    //獲取前(往后)一小時的時間
    SimpleDateFormat sdf = new SimpleDateFormat("yyyy-MM-dd HH:mm:ss");
    //這里設置你想要的時間
    Date date = new Date();

    Calendar calendar = Calendar.getInstance();
    calendar.setTime(date);

    //提前的時間用-1,往后的時間用+1;
    calendar.add(Calendar.HOUR_OF_DAY, +1);
    date = calendar.getTime();
    
    System.out.println("當前時間是:" + sdf.format(new Date()) + ",前一小時是:" + sdf.format(date));
    //>>>> 當前時間是:2020-06-23 15:02:55,前一小時是:2020-06-23 16:02:55
}

5、比較兩個時間前后

private static void compareTime() throws ParseException {
    //兩個時間進行比較,往往是我們比較頭疼的,用下面的方法,簡單明了,簡直是止痛神葯!
    String DateStr1 = "2018-03-01 00:01:01";
    String DateStr2 = "2024-12-10 15:50:35";

    DateFormat dateFormat = new SimpleDateFormat("yyyy-MM-dd HH:mm:ss");

    Date dateTime1 = dateFormat.parse(DateStr1);
    Date dateTime2 = dateFormat.parse(DateStr2);

    Calendar calendar = Calendar.getInstance();
    Date systemDate = calendar.getTime();

    int ago = dateTime1.compareTo(systemDate);
    int future = dateTime2.compareTo(systemDate);

    System.out.println("以前的時間:" + ago + ",未來的時間:" + future);
    //>>>> 以前的時間:-1,未來的時間:1 ;
}

  Tip

    兩個Date類型的變量可以通過 date1.compareTo(date2);方法來比較。此方法的描述是這樣的:
    如果參數 date1 等於此 date2,則返回值 0;
    如果此 date1 在 date2 參數之前,則返回小於 0 的值;
    如果此 date2 在 date2 參數之后,則返回大於 0 的值。
  實際上比較的是自1970 年 1 月 1 日 00:00:00 GMT以來的毫秒數。毫秒數越大的時間越大。

6、計算兩個時間差

  我們在數據庫

public static void getTimeDifference() throws ParseException {

    SimpleDateFormat dateFormat = new SimpleDateFormat("yyyy-MM-dd HH:mm:ss");

    Date date1 = dateFormat.parse("2020-05-01 18:53:40");
    Date date2 = new Date();

    //一天的毫秒數
    long d = 1000 * 24 * 60 * 60;
    //一小時的毫秒數
    long h = 1000 * 60 * 60;
    //一分鍾的毫秒數
    long m = 1000 * 60;
    // long ns = 1000;
    // 獲得兩個時間的毫秒時間差異
    long timeDiff = Math.abs(date2.getTime() - date1.getTime());
    // 計算差多少天
    long day = timeDiff / d;
    // 計算差多少小時
    long hour = timeDiff % d / h;
    long hour01 = timeDiff / h;
    // 計算差多少分鍾
    long min = timeDiff % d % h / m;
     //輸出結果
    System.out.println("當前時間是:" + dateFormat.format(date2));
    System.out.println("比較時間是:" + dateFormat.format(date1));
    System.out.println("間隔:" + day + "天" + hour + "小時" + min + "分鍾");
    /*
        當前時間是:2020-06-23 15:59:33
        比較時間是:2020-05-01 18:53:40
        間隔:52天21小時5分鍾
    */
}

  Tip:這里使用了Math.abs()函數取絕對值,如果不用這個函數,那就需要注意一下哪個時間 減 哪個時間;

 


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM