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 日期比較
用 String
的 compareTo()
方法:
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