Java Date
首先我們需要了解java.util.Date包中的Date(日期)類,官方文檔也很簡單:Class Date
略去繼承關係和我們主題不相干的方法,簡寫爲如下代碼:
package java.util.Date;
public class Date {
public Date() {
//對象創建時的時間
}
public Date(Long date) {
//設置爲距離被稱爲“新紀元”的標準基時間的毫秒數,
//即1970年1月1日,00:00:00:00:00:00。
}
public boolean before(Date when) {
//返回本Date是否在該Date之前
}
public boolean after(Date when) {
//返回本Date是否在該Date之後
}
public int compareTo(Date anotherDate) {
//返回兩Date對象比較結果,相同返回0,本對象比參數對象時間晚則返回大於0的數,早則返回小於0的數。
//經使用Thread.sleep()方法測試,無論時間差值多少,返回的大於0的數均爲1,小於0的數均爲-1
}
public long getTime() {
//返回距離標準基時間的毫秒數
}
public void setTime(Long time) {
//用距離標準基時間的毫秒數設置該Date
}
public String toString() {
//將Date以 "dow mon dd hh:mm:ss zzz yyyy" 格式返回,即 "星期 月 日 時:分:秒 時區 年"
}
}
另看到Java8中新增toInstant()方法,暫不太瞭解,關於Instant:Class Instant
時間的表示方式
在編程當中時間的表示方式有如下三種:
- Date對象
- 13位時間戳(長整型long):表示距離被稱爲“新紀元”的標準基時間的毫秒數,即1970年1月1日,00:00:00:00:00:00。
- 一定格式的字符串
我們的主要討論方向也就是圍繞三種格式的轉換。
格式轉換
Date對象和時間戳的相互轉換
1.Date對象轉時間戳
通過上述文檔可知,Date類的getTime()方法會返回該Date對象所表示時間對應的時間戳,即:
Date date = new Date();
//將date對象轉換爲時間戳
long timestamp = date.getTime();
2.時間戳轉Date對象
除去已經被廢除的方法,Date類僅有一個含參的構造方法,用時間戳初始化新建的對象:
Date date = new Date(timestamp);
也可以使用setTime()方法用時間戳爲已有的Date對象重新設置時間:
date.setTime(timestamp);
Date對象和字符串的相互轉換
1.Date對象轉字符串
首先可以用繼承自Object類的toString()方法將Date對象轉換爲固定格式的字符串:
Date date = new Date();
String dateString = date.toString();
如果想要轉換爲特定字符串格式,則需要藉助SimpleDateFormat類:
其中"yyyy-MM-dd HH:mm:ss"表示的是年-月-日 時:分:秒
Date date = new Date();
SimpleDateFormat dateFormat = new SimpleDateFormat("yyyy-MM-dd HH:mm:ss");
String dateString = dateFormat.format(date);
2.字符串轉Date對象
字符串轉Date對象同樣需要藉助SimpleDateFormat類,將字符串解析爲Date對象:
注意解析過程可能會拋出異常,需要套上try/catch語句
SimpleDateFormat dateFormat = new SimpleDateFormat("yyyy-MM-dd HH:mm:ss");
String dateString = "2018-10-15 13:50:00";
try {
dateFormat.parse(dateString);
} catch (ParseException e) {
// TODO Auto-generated catch block
e.printStackTrace();
}
時間戳和字符串相互轉換
即long和String的相互轉換,使用前面的轉換方法作中介,先轉爲Date,再轉爲另一種即可。