1. 程式人生 > >Java Calendar類

Java Calendar類

1. Calendar初始化

Calendar calendar = Calendar.getInstance();

預設是呼叫GregorianCalendar例項返回,在GregorianCalendar的建構函式中,設定為當前時間

public GregorianCalendar(TimeZone zone, Locale aLocale) {
    super(zone, aLocale);
    gdate = (BaseCalendar.Date) gcal.newCalendarDate(zone);
    setTimeInMillis(System.currentTimeMillis());
}

2. 設定時間

Calendar可以通過Date物件或者時間戳來設定時間。

setTime(Date date) // Date物件
setTimeInMillis(long millis) // 毫秒

Calendar也可以通過設定年/月/日/小時/分鐘/秒來設定時間。

set(int year, int month, int date)
set(int year, int month, int date, int hourOfDay, int minute)
set(int year, int month, int date, int hourOfDay, int minute, int second)

Calendar還可以通過設定特定領域來設定時間。

set(int field, int value)

常用的field有

欄位 含義
YEAR
MONTH
DATE
HOUR_OF_DAY 小時
MINUTE 分鐘
SECOND

set方法採取延緩計算的方法

Calendar calendar = Calendar.getInstance();
calendar.set(Calendar.MONTH, Calendar.APRIL); // 設定為4月
calendar.set(Calendar.DATE, 31); // 4月31日,如果沒有下面的設定,會自動轉換成5月1日
calendar.set(Calendar.MONTH, Calendar.JULY); // 7月31日

3. 獲取時間

Calendar可以獲取Date物件和時間戳。

getTime() // Date物件
getTimeInMillis() // 毫秒

Calendar也可以通過特定領域來獲取時間。

get(int field)

除了上面的常用field,還有

欄位 含義
HOUR 小時(12進位制)
DAY_OF_YEAR 今年第幾天
DAY_OF_WEEK 星期幾
WEEK_OF_MONTH 這個月第幾周
WEEK_OF_YEAR 今年第幾周

4. 其他方法

getActualXXX方法返回當前時間的最大或最小值,而getXXX方法則返回所有資料的最大或最小值。

getActualMaximum(int field)
getActualMinimum(int field)
getMaximum(int field)
getMinimum(int field)

例如在4月份返回最大天數,getActualMaximum返回30,而getMaximum返回31。

Calendar calendar = Calendar.getInstance();
calendar.set(Calendar.MONTH, Calendar.APRIL);
System.out.println(calendar.getMaximum(Calendar.DATE)); // 31
System.out.println(calendar.getActualMaximum(Calendar.DATE)); // 30

add方法增加某個領域的值, 負值為減少

add(int field, int amount)

如果是3月31日,增加到4月份,會自動修改日期。

Calendar calendar = Calendar.getInstance();
calendar.set(Calendar.MONTH, Calendar.MARCH);
calendar.set(Calendar.DATE, 31); // 2018-03-31
calendar.add(Calendar.MONTH, 1); // 2018-04-30
calendar.add(Calendar.MONTH, 12); // 2019-04-30

5. 注意點

Calendar中星期是從週日開始計算的

public final static int SUNDAY = 1;
public final static int MONDAY = 2;
public final static int TUESDAY = 3;
public final static int WEDNESDAY = 4;
public final static int THURSDAY = 5;
public final static int FRIDAY = 6;
public final static int SATURDAY = 7;

而Calendar中月份是從0開始的。

public final static int JANUARY = 0;
public final static int FEBRUARY = 1;
public final static int MARCH = 2;
public final static int APRIL = 3;
public final static int MAY = 4;
public final static int JUNE = 5;
public final static int JULY = 6;
public final static int AUGUST = 7;
public final static int SEPTEMBER = 8;
public final static int OCTOBER = 9;
public final static int NOVEMBER = 10;
public final static int DECEMBER = 11;

6. 日期格式化

Calendar calendar = Calendar.getInstance();
new SimpleDateFormat("yyyy-MM-dd hh:mm:ss").format(calendar.getTime())