Date類和Calendar類都是關於日期的類,都在java.util包中,使用時需要import。
Date
java.util.Date類的對象用來表示時間和日期,用得最多的是獲取系統當前日期和時間,精確到毫秒。
Java中有兩個Date類,還有一個是java.sql.Date,這個類一般不用,即使在數據庫中也不推薦使用。
寫代碼時注意導入的包一定是java.util包。
import java.util.Date;
public class TestDate {
public static void main(String[] args) {
Date date = new Date(); // 獲得當前的系統日期和時間
System.out.println("今天的日期是:" + date);
Date dateL = new Date(0L);// 帶參版:參數是毫秒值
System.out.println("Date(long date)的日期是:" + dateL);
long time = date.getTime(); // 獲得毫秒數
System.out.println("自1970年1月1日起以毫秒為單位的時間(GMT):" + time);
// Deprecated,不贊成使用。建議使用Calendar代替。
Date dateYMD = new Date(1999, 01, 02);
Date dateYMDHMS = new Date(1999, 01, 02, 10, 10, 10);
}
}
日期格式化
simpleDateFormat.format(_date):把Date類型轉為格式化的字符串
simpleDateFormat.parse("1949-10-01"):把格式化的字符串轉為Date類型
import java.text.DateFormat;// 抽象類
import java.text.ParseException;
import java.text.SimpleDateFormat;
import java.util.Date;
// DateFormat:日期↔文本
public class TestDate格式化 {
public static void main(String[] args) {
Date _date = new Date(); // 獲得當前的系統日期和時間
// 創建DateFormat對象
DateFormat _dateFormat = new SimpleDateFormat("yyyy-MM-dd");
// format(Date date):按照指定模式,把日期轉為字符串
String _s = _dateFormat.format(_date);
System.out.println("SimpleDateFormat:" + _s);
// -------------------------------
// parse方法:按照指定格式解析
try {
Date parse = _dateFormat.parse("1949-10-01");
System.out.println(parse);
} catch (ParseException e) {
e.printStackTrace();
}
}
}
Date類里很多方法被宣布“過時了”,過時了不是不能用,只是不贊成使用。
比如上面第一段代碼中的Date的帶年月日的構造方法。
@Deprecated
public Date(int year, int month, int date) {
this(year, month, date, 0, 0, 0);
}
如果要通過年月日構造一個日期類型的對象,推薦使用Calendar類。
Calendar
java.util.Calendar類(日歷)是抽象類,無法實例化。
public abstract class Calendar implements Serializable, Cloneable, Comparable<Calendar> {
……
}
要得到對象,只能通過調用getInstance方法來獲得\
Calendar cal = Calendar.getInstance();
一般得到的是GregorianCalendar的實例對象,可以通過toString()輸出結果看到。
方法 | 解釋 |
---|---|
Calendar getInstance() | 獲取Calendar對象 |
Date getTime() | Calendar對象轉為Date對象 |
int get(int fields) | 獲取fields指定部分的值 |
void set(int fields, int value) | 將value中指定的值設置到fields指定的部分 |
void add(int fields, int amount) | 將amount值添加到fields指定的時間或日期部分 |
Object clone() | 返回調用對象的副本 |
void clear() | 清除當前對象中所有的時間組成部分 |
boolean after(Object obj) | 如果調用對象時間在obj之后,返回true |
boolean before(Object obj) | 如果調用對象時間在obj之前,返回true |
boolean equals(Object obj) | 判斷調用對象與obj是否相等 |
import java.util.Calendar;
public class TestCalendar {
public static void main(String[] args) {
Calendar cal = Calendar.getInstance();
// int _year = 2019, _month = 1, _day = 1;
// cal.set(_year, _month - 1, _day);
System.out.println(cal.get(Calendar.YEAR) + ":年");
System.out.println(cal.get(Calendar.MONTH) + ":月,從0開始算");
System.out.println(cal.get(Calendar.DATE) + ":當天 1-31");
System.out.println(cal.get(Calendar.DAY_OF_MONTH) + ":當天 1-31");
System.out.println(cal.get(Calendar.DAY_OF_WEEK) + ":星期,周日算第1天");
System.out.println(cal.get(Calendar.WEEK_OF_MONTH) + ":月的第n周");
System.out.println(cal.get(Calendar.WEEK_OF_YEAR) + ":年的第n周");
System.out.println(cal.get(Calendar.DAY_OF_YEAR) + ":一年里的第n天");
System.out.println(cal.get(Calendar.HOUR) + ":12小時制");
System.out.println(cal.get(Calendar.HOUR_OF_DAY) + ":24小時制");
System.out.println(cal.get(Calendar.MINUTE) + ":分");
System.out.println(cal.get(Calendar.SECOND) + ":秒");
System.out.println(cal.get(Calendar.MILLISECOND) + ":毫秒");
// 閏年2月29的一年之后
cal.set(2000, 2 - 1, 29);
// 把日歷轉為日期
System.out.println(cal.getTime());
cal.add(Calendar.YEAR, 1);
System.out.println(cal.getTime());
}
}
*java8新增的time包
java.time,用於日期、時間處理
|--Clock類:獲取指定時區的日期時間
|--Duration類:一段持續的時間
|--Instant類:具體時刻,精確到納秒
|--LocalDate類:不帶時區的時間
……
import java.time.*;
public class TestDateJava8 {
public static void main(String[] args) {
testClock();
testDuration();
testInstant();
testLocalDate();
}
static void testClock() {
System.out.println("---Clock類:獲取指定時區的日期時間---");
Clock clock = Clock.systemUTC();// 世界統一時間
System.out.println("當前時刻為:" + clock.instant());
// millis()獲取clock對應的毫秒數,與System.currentTimeMillis()輸出相同
System.out.println(clock.millis() + ":clock.millis()");
System.out.println(System.currentTimeMillis() + ":System.currentTimeMillis()");
}
static void testDuration() {
System.out.println("---Duration類:一段持續的時間---");
int s = 60 * 59;// 60秒*59=59分鍾
Duration d = Duration.ofSeconds(s);
System.out.println(s + "秒相當於" + d.toMinutes() + "分");
System.out.println(s + "秒相當於" + d.toHours() + "小時");
System.out.println(s + "秒相當於" + d.toDays() + "天");
}
static void testInstant() {
System.out.println("---Instant類:具體時刻,精確到納秒---");
Instant instant = Instant.now();// 獲取當前時間
System.out.println(instant + ":Instant.now() ");
Instant instant2 = instant.plusSeconds(6000);
System.out.println(instant2 + ":加時間plusSeconds()");
}
static void testLocalDate() {
System.out.println("---LocalDate類:不帶時區的時間---");
LocalDate localDate = LocalDate.now();
System.out.println(localDate + ":LocalDate.now()");
// 獲得某年的第幾天
int _某一年 = 2017, _第幾天 = 100;
localDate = LocalDate.ofYearDay(_某一年, _第幾天);
System.out.println(localDate + ":" + _某一年 + "年,第" + _第幾天 + "天LocalDate.ofYearDay()");
}
}