日期操作類(DateFormat與SimpleDateFormat)的區別和使用詳解
你也可以檢視我的其他同類文章,也會讓你有一定的收貨
一、DateFormat類
此類是一個日期的格式化類,用來格式化日期。具體日期可以通過java.util.Date類來獲取。
DateFormat類的定義:此類是定義在java.test包中的。
public abstract class DateFormat extends Format
- 1
1.1、例項化DateFormat
DateFormat是一個抽象類,按照以住的思路,直接使用其子類例項化即可。但是DateFormat 類本身的內部提供了可以直接為其例項化的操作。
//得到日期的DateFormat物件:public static final DateFormat getDateInstance ();//得到日期時間的DateFormat物件:public static final DateFormat getDateTimeInstance();//使用DateFormat類格式化Date類日期public final String format(Date date)
- 1
- 2
- 3
- 4
- 5
- 6
- 7
- 8
- 9
1.2、日期格式
美式日期格式
import java.text.DateFormat ;import java.util.Date ;public class DateDemo03{ public static void main(String args[]){ DateFormat df1 = null ; // 宣告一個DateFormat DateFormat df2 = null ; // 宣告一個DateFormat df1 = DateFormat.getDateInstance() ; // 得到日期的DateFormat物件 df2 = DateFormat.getDateTimeInstance() ; // 得到日期時間的DateFormat物件 System.out.println("DATE:" + df1.format(new Date())) ; // 按照日期格式化 System.out .println("DATETIME:" + df2.format(new Date())) ; // 按照日期時間格式化 }};
- 1
- 2
- 3
- 4
- 5
- 6
- 7
- 8
- 9
- 10
- 11
- 12
- 13
中式日期格式(通過Locale物件指定要顯示的區域,指定的區域是中國)
import java.text.DateFormat ; import java.util.Date ; import java.util.Locale ; public class DateDemo04{ public static void main(String args[]){ DateFormat df1 = null ; // 宣告一個DateFormat DateFormat df2 = null ; // 宣告一個DateFormat df1 = DateFormat.getDateInstance(DateFormat.YEAR_FIELD,new Locale("zh","CN")) ; // 得到日期的DateFormat物件 df2 = DateFormat.getDateTimeInstance(DateFormat.YEAR_FIELD,DateFormat.ERA_FIELD,new Locale("zh","CN")) ; // 得到日期時間的DateFormat物件 System.out.println("DATE:" + df1.format(new Date())) ; // 按照日期格式化 System.out.println("DATETIME:" + df2.format(new Date())) ; // 按照日期時間格式化 } };
- 1
- 2
- 3
- 4
- 5
- 6
- 7
- 8
- 9
- 10
- 11
- 12
- 13
- 14
二、SimpleDateFormat類
SimpleDateFormat函式的繼承關係:
java.lang.Object
|
+—-java.text.Format
|
+—-java.text.DateFormat
|
+—-java.text.SimpleDateFormat
將一種日期格式變為另外一種日期格式
原始日期:2008-10-19 10:11:30.345轉換後日期:2008 年 10 月 19 日 10 點 11 分 30 秒 345 毫秒
- 1
- 2
- 3
2.1、日期模板
首先準備好一個日期格式模板,根據模板的格式來轉化日期。
2.2、SimpleDateFormat類使用
在構造物件時要傳入日期格式模板
//構造方法:public SimpleDateFormat(String pattern)//轉換:public Date parse(String source)throws ParseException //-->此時取得的是全部時間數。//格式化:public final String Format(Date date) //-->將時間重新格式化成字串顯示。
- 1
- 2
- 3
- 4
- 5
- 6
- 7
- 8
2.3、示例
把Date轉化成指定的日期格式
public class FormatDateTime { public static void main(String[] args) { SimpleDateFormat myFmt=new SimpleDateFormat("yyyy年MM月dd日 HH時mm分ss秒"); SimpleDateFormat myFmt1=new SimpleDateFormat("yy/MM/dd HH:mm"); SimpleDateFormat myFmt2=new SimpleDateFormat("yyyy-MM-dd HH:mm:ss");//等價於now.toLocaleString() SimpleDateFormat myFmt3=new SimpleDateFormat("yyyy年MM月dd日 HH時mm分ss秒 E "); SimpleDateFormat myFmt4=new SimpleDateFormat( "一年中的第 D 天 一年中第w個星期 一月中第W個星期 在一天中k時 z時區"); Date now=new Date(); System.out.println(myFmt.format(now)); System.out.println(myFmt1.format(now)); System.out.println(myFmt2.format(now)); System.out.println(myFmt3.format(now)); System.out.println(myFmt4.format(now)); System.out.println(now.toGMTString()); System.out.println(now.toLocaleString()); System.out.println(now.toString()); } }
- 1
- 2
- 3
- 4
- 5
- 6
- 7
- 8
- 9
- 10
- 11
- 12
- 13
- 14
- 15
- 16
- 17
- 18
- 19
- 20
- 21
- 22
效果:
2004年12月16日 17時24分27秒
04/12/16 17:24
2004-12-16 17:24:27
2004年12月16日 17時24分27秒 星期四
一年中的第 351 天 一年中第51個星期 一月中第3個星期 在一天中17時 CST時區
16 Dec 2004 09:24:27 GMT
2004-12-16 17:24:27
Thu Dec 16 17:24:27 CST 2004
把給定的字串中的日期提取為Date
這樣做,通常是一個日期字串,但不是想要的格式,可以先轉化為Date,再轉化為其它格式。
import java.text.* ; import java.util.* ; public class DateDemo05{ public static void main(String args[]){ String strDate = "2008-10-19 10:11:30.345" ; // 準備第一個模板,從字串中提取出日期數字 String pat1 = "yyyy-MM-dd HH:mm:ss.SSS" ; // 準備第二個模板,將提取後的日期數字變為指定的格式 String pat2 = "yyyy年MM月dd日 HH時mm分ss秒SSS毫秒" ; SimpleDateFormat sdf1 = new SimpleDateFormat(pat1) ; // 例項化模板物件 SimpleDateFormat sdf2 = new SimpleDateFormat(pat2) ; // 例項化模板物件 Date d = null ; try{ d = sdf1.parse(strDate) ; // 將給定的字串中的日期提取出來 }catch(Exception e){ // 如果提供的字串格式有錯誤,則進行異常處理 e.printStackTrace() ; // 列印異常資訊 } System.out.println(sdf2.format(d)) ; // 將日期變為新的格式 } };
- 1
- 2
- 3
- 4
- 5
- 6
- 7
- 8
- 9
- 10
- 11
- 12
- 13
- 14
- 15
- 16
- 17
- 18
- 19
- 20
DateFormat 和SimpleDateFormat 的區別
1.DateFormat 可以直接使用,但其本身是一個抽象類,可以根據Locate指定的區域得到對應的日期時間格式
2.SimpleDateFormat 類是DateFormat 類的子類,一般情況下來講 DateFormat 類很少會直接使用。而都使用SimpleDateFormat 類完成。
關注我的公眾號,輕鬆瞭解和學習更多技術