1. 程式人生 > >Date、Calendar、DateFormat、SimpleDateFormat類

Date、Calendar、DateFormat、SimpleDateFormat類

Date類是一個較為常用的類,但其操作的日期格式會有一些不符合個人要求,而如果想要進一步取得一些自己需要的時間,則可以使用Calendar

java.util包中定義了Date類,Date類本身使用非常簡單,直接輸出其例項化物件即可。

使用Calendar類可以直接將日期精確到毫秒。

public abstract class Calendar

extends Object

Calendar類是一個抽象類,既然是一個抽象類則肯定無法直接使用,此時就要利用物件多型性的概念,通過向上的轉型關係例項化本類物件。

通過此類就可以取得一個完整的日期,但是在取得月份時要特別注意,需要增加1.如果按照此方式取得,則也會很麻煩,最好的做法是將

Date進行一些相關的格式化操作。

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毫秒

但是以上的兩個日期中的數字是完全一樣的,唯一不同的是日期的顯示格式不同,所以要想實現這樣的轉換功能就必須依靠

SimpleDateFormat類。

如果想實現轉換,則必須首先準備好一個模板,通過此模板進行日期數字的提取工作。

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
	}

}