1. 程式人生 > >日期操作類(DateFormat與SimpleDateFormat)的區別和使用詳解

日期操作類(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 類完成。

 

關注我的公眾號,輕鬆瞭解和學習更多技術
  這裡寫圖片描述