Date
Date對象的創建
java.util包提供了Date類來封裝當前的日期和時間。
Date類提供兩個構造函數來實例化Date對象。
public Date() {
this(System.currentTimeMillis());
}
無參的構造函數使用當前日期和事件來初始化對象。
public Date(long date) {
fastTime = date;
}
還有一些重載的構造函數,被註解@Deprecated修飾了,不推薦使用。
此構造函數接收一個參數,該參數是從1970年1月1日起的毫秒數。
Date中常用方法
after和before
public boolean after(Date when) {
return getMillisOf(this) > getMillisOf(when);
}
public boolean before(Date when) {
return getMillisOf(this) < getMillisOf(when);
}
getTime
public long getTime() {
return getTimeImpl();
}
compareTo
public int compareTo(Date anotherDate) {
long thisTime = getMillisOf(this);
long anotherTime = getMillisOf(anotherDate);
return (thisTime<anotherTime ? -1 : (thisTime==anotherTime ? 0 : 1));
}
equals
public boolean equals(Object obj) {
return obj instanceof Date && getTime() == ((Date) obj).getTime();
}
常用到的時間類
DateFormat和SimpleDateFormat
完成字符串和時間對象的轉化
Calendar和GregorianCalendar
人類在識別時間的時候是根據年月日這種日期概念進行分辨。而計算機是long類型的數字。通過Calendar處理兩者之間的轉換。
作業: 自己寫一個類(DateUtil.java/CommonService)
/**
* 計算兩個時間之間的差值,以小時爲單位
*
* @param 被減的時間
* @param 減數時間
* @return 第一個時間減第二個時間的值(H)
/
/*
* 查詢前N天的時間
*
* @param pattern
* @param days
* @return
/
/*
* 將DATE轉化爲指定的time字符串 日期轉字符串(Date轉String)
*
* @param String
* 時間格式
* @return String 主機時間
*/
/**
* 將一格式的時間字符串轉爲爲另一個格式時間字符串,主要針對getFinalTime使用(兩個參數,不同的字符串格式)
*
* @param time
* @return
* @throws Exception
*/
public class DateTest {
public static void main(String[] args) {
// 使用無參的構造函數創建Date對象
Date date = new Date();
// 使用toString()方法輸出日期時間
System.out.println(date.toString());
// 使用有參數的構造函數創建Date對象
Date date1 = new Date(System.currentTimeMillis());
System.out.println(date1.toString());
// 使用GMT 格林威治時間
System.out.println(date.toGMTString()); // 不建議這麼使用
// 上面System.out.println(new Date(0)),打印出來的時間是8點而非0點,原因是存在系統時間和本地時間的問題,其實系統時間依然是0點,只不過我們使用的是北京時間,屬於東8區,故打印的結果是8點。
// 如果通過毫秒數來表示1970年1月1日9點
Date date2 = new Date(3600l * 1000);
System.out.println(date2.toString());
// before和after
boolean beforeFlag = date1.before(date2);
boolean afterFlag = date1.after(date2);
System.out.println("beforeFlag : " + beforeFlag);
System.out.println("afterFlag : " + afterFlag);
// getTime
long getTimeResult = new Date().getTime();
System.out.println("getTimeResult : " + getTimeResult);
}
}
public class DateFormatTest {
public static void main(String[] args) {
//DateFormat dateFormat = new SimpleDateFormat(“yyyy年MM月dd日”);
DateFormat dateFormat = new SimpleDateFormat(“yyyy-MM-dd HH:mm:ss”);
//DateFormat dateFormat = new SimpleDateFormat(“yyyy-mm-dd HH:MM:ss”); // 常見錯誤的寫法
Date date = new Date();
String dateStr = dateFormat.format(date); // Date轉字符串(按照格式化要求)
System.out.println("dateStr : " + dateStr);
System.out.println("******************************");
String str = "2018年03月21日 10:12:13";
DateFormat dateFormat1 = new SimpleDateFormat("yyyy年MM月dd日 HH:mm:ss");
Date dateResult = null;
try {
dateResult = dateFormat1.parse(str); // 字符串轉Date(格式化串必須和字符串的格式一模一樣)
System.out.println("dateResult : " + dateResult.toString());
} catch (ParseException e) {
e.printStackTrace();
}
}
}
public class CalendarTest {
public static void main(String[] args) {
Calendar calendar = new GregorianCalendar();
// 通過set方法同時塞日期和時間
calendar.set(2018, Calendar.APRIL, 1, 12, 12, 12);
Date date = calendar.getTime();
System.out.println(date);
// 通過set方法分別塞年、月、日
Calendar calendar1 = new GregorianCalendar();
calendar1.set(Calendar.YEAR, 2012);
calendar1.set(Calendar.MONTH, 1);
calendar1.set(Calendar.DATE, 10);
// 通過setTime方法設置時間
Calendar calendar2 = new GregorianCalendar();
calendar2.setTime(new Date());
// 測試日期計算
Calendar calendar3 = new GregorianCalendar();
calendar3.add(Calendar.YEAR, 10);
calendar3.add(Calendar.YEAR, -20);
System.out.println(calendar3.getTime());
}
}