【 日期時間操作 】

1 Date

java.util.Date 類表示特定的瞬間,精確到毫秒。

1.1 構造方法

繼續查閱 Date 類的描述,發現 Date 擁有多個構造函數,只是部分已經過時,但是其中有未過時的構造函數可以把毫秒值轉成日期對象。

  • public Date():分配 Date 對象並初始化此對象,以表示分配它的時間(精確到毫秒)。
  • public Date(long date):分配 Date 對象並初始化此對象,以表示自從標準基準時間(稱爲“曆元(epoch)”,即1970年1月1日00:00:00 GMT)以來的指定毫秒數。

注意:由於我們處於東八區,所以我們的基準時間爲1970年1月1日8時0分0秒。

簡單來說:使用無參構造,可以自動設置當前系統時間的毫秒時刻;指定 long 類型的構造參數,可以自定義毫秒時刻。例如:

import java.util.Date;

public class TestDateTime {

    public static void main(String[] args) {
        // 創建日期對象,把當前的時間轉成日期對象
        System.out.println(new Date()); // Tue Oct 29 19:46:04 CST 2019
        // 創建日期對象,把當前的毫秒值轉成日期對象
        System.out.println(new Date(0L)); // Thu Jan 01 08:00:00 CST 1970
    }
}

注意:在使用 println 方法時,會自動調用 Date 類中的 toString 方法。Date 類對 Object 類中的 toString 方法進行了覆蓋重寫,所以結果爲指定格式的字符串。

1.2 常用方法

Date 類中的多數方法已經過時,常用的方法有:

  • public long getTime():把日期對象轉換成對應的時間毫秒值。

2 DateFormat

java.text.DateFormat日期/時間 格式化子類的抽象類,我們通過這個類可以幫我們完成日期和文本之間的轉換,也就是可以在 Date 對象與 String 對象之間進行來回轉換。

  • 格式化:按照指定的格式,從 Date 對象轉換爲 String 對象。
  • 解析:按照指定的格式,從 String 對象轉換爲 Date 對象。

格式規則

標識字母(區分大小寫) 含義
y
M
d
H
m
s

創建 SimpleDateFormat 對象的代碼如:

public class Main {

    public static void main(String[] args) throws Exception {

        String datetime1 = "2020-04-13 12:00:09";
        String datetime2 = "2020-04-13 17:22:33";

        SimpleDateFormat sdf = new SimpleDateFormat("yyyy-MM-dd HH:mm:ss");
        System.out.println(sdf.parse(datetime1)); // Mon Apr 13 12:00:09 CST 2020
        System.out.println(sdf.parse(datetime2)); // Mon Apr 13 17:22:33 CST 2020
        System.out.println(sdf.format(sdf.parse(datetime1))); // 2020-04-13 12:00:09

    }

}

DateFormat 類的常用方法有:

  • public String format(Date date):將 Date 對象格式化爲字符串。
  • public Date parse(String source):將字符串解析爲 Date 對象。

3 Calendar

日曆我們都見過

java.util.Calendar 是日曆類,在 Date 後出現,替換掉了許多 Date 的方法。該類將所有可能用到的時間信息封裝爲靜態成員變量,方便獲取。日曆類就是方便獲取各個時間屬性的。

獲取方式

import java.util.Calendar;

Calendar cal = Calendar.getInstance();

常用方法

  • public int get(int field):返回給定日曆字段的值。
  • public void set(int field, int value):將給定的日曆字段設置爲給定值。
  • public abstract void add(int field, int amount):根據日曆的規則,爲給定的日曆字段添加或減去指定的時間量。
  • public Date getTime():返回一個表示此Calendar時間值(從曆元到現在的毫秒偏移量)的Date對象。

Calendar 類中提供很多成員常量,代表給定的日曆字段:

字段值 含義
YEAR
MONTH 月(從0開始,可以+1使用)
DAY_OF_MONTH 月中的天(幾號)
HOUR 時(12小時制)
HOUR_OF_DAY 時(24小時制)
MINUTE
SECOND
DAY_OF_WEEK 週中的天(周幾,週日爲1,可以-1使用)

get/set方法

get方法用來獲取指定字段的值,set方法用來設置指定字段的值,代碼使用演示:

import java.util.Calendar;

public class CalendarUtil {
    public static void main(String[] args) {
        // 創建Calendar對象
        Calendar cal = Calendar.getInstance();
        // 設置年 
        int year = cal.get(Calendar.YEAR);
        // 設置月
        int month = cal.get(Calendar.MONTH) + 1;
        // 設置日
        int dayOfMonth = cal.get(Calendar.DAY_OF_MONTH);
        System.out.print(year + "年" + month + "月" + dayOfMonth + "日");
    }    
}
import java.util.Calendar;

public class Demo07CalendarMethod {
    public static void main(String[] args) {
        Calendar cal = Calendar.getInstance();
        cal.set(Calendar.YEAR, 2020);
        System.out.print(year + "年" + month + "月" + dayOfMonth + "日"); // 2020年1月17日
    }
}

add方法

add方法可以對指定日曆字段的值進行加減操作,如果第二個參數爲正數則加上偏移量,如果爲負數則減去偏移量。代碼如:

import java.util.Calendar;

public class Demo08CalendarMethod {
    public static void main(String[] args) {
        Calendar cal = Calendar.getInstance();
        System.out.print(year + "年" + month + "月" + dayOfMonth + "日"); // 2018年1月17日
        // 使用add方法
        cal.add(Calendar.DAY_OF_MONTH, 2); // 加2天
        cal.add(Calendar.YEAR, -3); // 減3年
        System.out.print(year + "年" + month + "月" + dayOfMonth + "日"); // 2015年1月18日; 
    }
}

getTime方法

Calendar中的getTime方法並不是獲取毫秒時刻,而是拿到對應的Date對象。

import java.util.Calendar;
import java.util.Date;

public class Demo09CalendarMethod {
    public static void main(String[] args) {
        Calendar cal = Calendar.getInstance();
        Date date = cal.getTime();
        System.out.println(date); // Tue Jan 16 16:03:09 CST 2018
    }
}

小貼士:

​ 西方星期的開始爲週日,中國爲週一。

​ 在Calendar類中,月份的表示是以0-11代表1-12月。

​ 日期是有大小關係的,時間靠後,時間越大。

4 日期比較

StringcompareTo() 方法:

String datetime1 = "2020-04-13 12:00:09";
String datetime2 = "2020-04-13 17:22:33";
System.out.println((datetime1.compareTo(datetime2) > 0) ? true : false); // false
發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章