Java Calendar類使用總結


平時在瀏覽一些網站時,有些網站會顯示出當前時間,如現在是xx年xx月xx日 xx時xx分xx秒,在實際的開發過程中,也會涉及到日期和時間的計算,Java中專門提供了一個類Calendar來處理日期與時間。

接下來就講解下Calendar類的使用場景及使用方法。

1. 獲取Calendar實例

首先,我們看下Calendar類的定義

public abstract class Calendar implements Serializable, Cloneable, Comparable<Calendar>

因為被定義為abstract,所以我們無法通過new來創建Calendar類的實例,不過Calendar類提供了一個類方法getInstance()來返回Calendar的實例。

public static Calendar getInstance()
{
  	return createCalendar(TimeZone.getDefault(), Locale.getDefault(Locale.Category.FORMAT));
}

由此,獲取Calendar實例的代碼如下所示:

Calendar calendar = Calendar.getInstance();

2. 獲取當前時間

package com.zwwhnly.springbootaction.date;

import java.util.Calendar;

public class CalendarDemo {
    public static void main(String[] args) {
        Calendar calendar = Calendar.getInstance();

        int year = calendar.get(Calendar.YEAR);
        // 月份的下標是從0開始的,即0~11分別代表1~12月,因此需要+1
        int month = calendar.get(Calendar.MONTH) + 1;
        int day = calendar.get(Calendar.DAY_OF_MONTH);
        // 24小時制
        int hour = calendar.get(Calendar.HOUR_OF_DAY);
        int minute = calendar.get(Calendar.MINUTE);
        int second = calendar.get(Calendar.SECOND);

        System.out.println("現在是:" + year + "年" + month + "月" + day + "日" + hour + "時" + minute + "分" + second + "秒");
    }
}

運行結果:

現在是:2019年2月21日15時36分38秒

**注意事項:**月份的下標是從0開始的,即0到11分別代表1到12月。

3. 設置時間

假設我們現在需要將時間設置為2019-02-21 23:59:59。

3.1 一起設置

Calendar calendar = Calendar.getInstance();
calendar.set(2019, Calendar.FEBRUARY, 21, 23, 59, 59);

System.out.println(calendar.getTime());

3.2 分別設置

Calendar calendar = Calendar.getInstance();
calendar.set(Calendar.YEAR, 2019);
calendar.set(Calendar.MONTH, Calendar.FEBRUARY);
calendar.set(Calendar.DAY_OF_MONTH, 21);
calendar.set(Calendar.HOUR_OF_DAY, 23);
calendar.set(Calendar.MINUTE, 59);
calendar.set(Calendar.SECOND, 59);

System.out.println(calendar.getTime());

3.1和3.2的運行結果都如下所示:

Thu Feb 21 23:59:59 CST 2019

4. 時間計算

4.1 增加秒

我們在3.1的基礎上增加1秒,那么時間應該是2019-02-22 00:00:00。

Calendar calendar = Calendar.getInstance();
calendar.set(2019, Calendar.FEBRUARY, 21, 23, 59, 59);
calendar.add(Calendar.SECOND, 1);
System.out.println(calendar.getTime());

運行結果:

Fri Feb 22 00:00:00 CST 2019

4.2 增加月

首先我們將時間設置為2019-01-31,然后先增加1個月,再增加2個月,代碼如下所示:

Calendar calendar = Calendar.getInstance();

calendar.set(2019, Calendar.JANUARY, 31);
System.out.println(calendar.getTime());
calendar.add(Calendar.MONTH, 1);
System.out.println(calendar.getTime());
calendar.add(Calendar.MONTH, 2);
System.out.println(calendar.getTime());

運行結果:

Thu Jan 31 15:58:03 CST 2019 Thu Feb 28 15:58:03 CST 2019 Sun Apr 28 15:58:03 CST 2019

注意事項:當所在的月份沒有那個日期時,如2月份沒有31號,返回的是所在月的最后一天(2月28號)。

5. 獲取某月的第一天和最后一天

package com.zwwhnly.springbootaction.date;

import java.text.SimpleDateFormat;
import java.util.Calendar;

public class CalendarDemo {
    public static void main(String[] args) {
        System.out.println(getFirstDayOfMonth(2019, 2));
        System.out.println(getLastDayOfMonth(2019, 2));

        System.out.println(getFirstDayOfMonth(2019, 3));
        System.out.println(getLastDayOfMonth(2019, 3));
    }

    public static String getLastDayOfMonth(int year, int month) {
        Calendar calendar = Calendar.getInstance();
        calendar.set(Calendar.YEAR, year);
        calendar.set(Calendar.MONTH, month - 1);
        calendar.set(Calendar.DAY_OF_MONTH, calendar.getActualMaximum(Calendar.DATE));

        return new SimpleDateFormat("yyyy-MM-dd").format(calendar.getTime());
    }

    public static String getFirstDayOfMonth(int year, int month) {
        Calendar calendar = Calendar.getInstance();
        calendar.set(Calendar.YEAR, year);
        calendar.set(Calendar.MONTH, month - 1);
        calendar.set(Calendar.DAY_OF_MONTH, calendar.getMinimum(Calendar.DATE));

        return new SimpleDateFormat("yyyy-MM-dd").format(calendar.getTime());
    }
}

運行結果:

2019-02-01 2019-02-28 2019-03-01 2019-03-31

6. 參考

Java中Calendar類的常用方法

Java Calendar類的使用總結

java時間類Date、Calendar及用法


免責聲明!

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



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