Date、Calendar、DateFormat、SimpleDateFormat類
Date類是一個較為常用的類,但其操作的日期格式會有一些不符合個人要求,而如果想要進一步取得一些自己需要的時間,則可以使用Calendar類。
在java.util包中定義了Date類,Date類本身使用非常簡單,直接輸出其例項化物件即可。
使用Calendar類可以直接將日期精確到毫秒。
public abstract class Calendar
extends Object
Calendar類是一個抽象類,既然是一個抽象類則肯定無法直接使用,此時就要利用物件多型性的概念,通過向上的轉型關係例項化本類物件。
通過此類就可以取得一個完整的日期,但是在取得月份時要特別注意,需要增加1.如果按照此方式取得,則也會很麻煩,最好的做法是將
DateFormat類是一個日期的格式化類,專門格式化日期操作,因為java.util.Date類本身就已經包含了完整的日期,所以只需要將此日期按照一些好的格式化顯示以下就好了。
觀察DateFormat類的定義:此類是定義在java.text包中的。
public abstract class DateFormat
extends Format
但是從定義上可以發現,此類依然是一個抽象類,按照以往的思路,直接使用其子類例項化即可,但是DateFormat類本身的內部提供了可以直接為其例項化的操作。
得到日期的DateFormat物件:public
static final DateFormatgetDateInstance()
得到日期時間的DateFormat物件:public static final DateFormatgetDateTimeInstance()
直接使用DateFormat類完成Date類的轉換功能:public final String format(Date date)
SimpleDateFormat類的功能是完成日期的顯示格式化,例如,在開發中,可能會將一種日期格式變為另一種日期格式,如下所示:
原始日期:2017-8-22 12:57:23.232
轉換後日期:2017年8月22日12時57分23秒232毫秒
但是以上的兩個日期中的數字是完全一樣的,唯一不同的是日期的顯示格式不同,所以要想實現這樣的轉換功能就必須依靠
如果想實現轉換,則必須首先準備好一個模板,通過此模板進行日期數字的提取工作。
No. |
標記 |
描述 |
1 |
y |
表示年,年份是四位數字,所以需要使用“yyyy”表示年。 |
2 |
M |
表示月,月份時兩位數字,所以需要使用“MM”表示月。 |
3 |
d |
表示日,日是兩位數字,所以需要使用“dd”表示日。 |
4 |
H |
表示時,兩位數字“HH”表示 |
5 |
m |
表示分,兩位數字“mm” |
6 |
s |
表示秒,兩位數字“ss” |
7 |
S |
表示毫秒,三位數字“SSS” |
在SimpleDateFormat類使用的時候,必須注意的是在構造物件時要傳入匹配的模板。
構造方法:public SimpleDateFormat(String pattern)
轉換:public Date parse(String source) throws ParseException à此時取得的是全部的時間數
格式化:public final String format(Date date) à將時間重新格式化成字串顯示
import java.text.DateFormat;
import java.text.ParseException;
import java.text.SimpleDateFormat;
import java.util.Calendar;
import java.util.Date;
import java.util.GregorianCalendar;
import java.util.Locale;
public class Main {
public static void main(String[] args) {
Date date = new Date();//直接例項化Date物件
System.out.println(date);//Date類可直接使用直接列印,格式不是很友好,一般不用
Calendar calendar = new GregorianCalendar();//例項化Calendar物件,要用其子類來例項化,Calendar本身是抽象類
System.out.println("YEAR:"+calendar.get(Calendar.YEAR));//列印年
System.out.println("MONTH:"+(calendar.get(Calendar.MONTH)+1));//月,月要加1
System.out.println("DAY_OF_MONTH:"+calendar.get(Calendar.DAY_OF_MONTH));//日
System.out.println("HOUR_OF_DAY:"+calendar.get(Calendar.HOUR_OF_DAY));//時
System.out.println("MINUTE:"+calendar.get(Calendar.MINUTE));//分
System.out.println("SECOND:"+calendar.get(Calendar.SECOND));//秒
System.out.println("MILLISECOND:"+calendar.get(Calendar.MILLISECOND));//毫秒
System.out.println("-----------------DateFormat類--------------------------");
//DateFormat類不能用建構函式直接例項化,但是其中提供了取得例項的方法,如下
DateFormat df1 = null;
DateFormat df2 = null;
df1 = DateFormat.getDateInstance();//得到日期物件:DATE:2017-8-22
df2 = DateFormat.getTimeInstance();//得到時間物件 :DATETIME:12:29:30
System.out.println("DATE:"+df1.format(new Date()));//預設的格式化
System.out.println("DATETIME:"+df2.format(new Date()));//預設的格式化
System.out.println("----------------------國際化的日期時間顯示---------------------");
DateFormat df3 = null;
DateFormat df4 = null;
//三種例項化方法包含以上一種和以下兩種(df1,df3)
//df3 = DateFormat.getDateInstance(DateFormat.YEAR_FIELD);
df3 = DateFormat.getDateInstance(DateFormat.YEAR_FIELD, new Locale("zh","CN"));
//以下三種例項化方法
//df4 = DateFormat.getDateTimeInstance();
//df4 = DateFormat.getDateTimeInstance(DateFormat.YEAR_FIELD, DateFormat.ERA_FIELD);
df4 = DateFormat.getDateTimeInstance(DateFormat.YEAR_FIELD,DateFormat.ERA_FIELD, new Locale("zh","CN"));
System.out.println("DATE:"+df1.format(new Date()));//按照日期格式化
System.out.println("DATETIME:"+df2.format(new Date()));//按照日期時間格式化
System.out.println("-------------------SimpleDateFormat類------------------------");
String strDate = "1111-11-11 11:11:11:111";//一個日期
String pat1 = "yyyy-MM-dd HH:mm:ss:SSS";//按照這個格式取得日期
String pat2 = "yyyy年MM月dd日HH時mm分ss秒SSS毫秒";//按照這個格式顯示日期
SimpleDateFormat sdf1 = new SimpleDateFormat(pat1);//按照pat1格式初始化一個sdf1物件
SimpleDateFormat sdf2 = new SimpleDateFormat(pat2);//按照pat2格式初始化一個sdf2物件
Date d = null;//建立一個Date物件
try {
d = sdf1.parse(strDate);//按照pat1格式取一個日期,注意定義的格式pat1和要顯示的日期strDate格式必須相同,不然報錯
} catch (ParseException e) {
// TODO Auto-generated catch block
e.printStackTrace();
}
System.out.println(sdf2.format(d));//按照pat2顯示日期:1111年11月11日11時11分11秒111毫秒
DateFormat df5 = null;
//df2已經定義過為:df2 = DateFormat.getTimeInstance();看一下兩者區別
df5 = DateFormat.getDateTimeInstance();
System.out.println(df2.format(new Date()));//結果:12:44:00
System.out.println(df5.format(new Date()));//結果:2017-8-22 12:44:00
}
}