程序師世界是廣大編程愛好者互助、分享、學習的平台,程序師世界有你更精彩!
首頁
編程語言
C語言|JAVA編程
Python編程
網頁編程
ASP編程|PHP編程
JSP編程
數據庫知識
MYSQL數據庫|SqlServer數據庫
Oracle數據庫|DB2數據庫
 程式師世界 >> 編程語言 >> JAVA編程 >> 關於JAVA >> Java時間相關內容學習(4) DateFormat

Java時間相關內容學習(4) DateFormat

編輯:關於JAVA

本章主要介紹DateFormat。

DateFormat 介紹

DateFormat 的作用是 格式化並解析“日期/時間”。實際上,它是Date的格式化工具,它能幫助我們格式化Date,進而將Date轉換成我們想要的String字符串供我們使用

不過DateFormat的格式化Date的功能有限,沒有SimpleDateFormat強大;但DateFormat是SimpleDateFormat的父類。所以,我們先對DateFormat有個整體了解,然後再學習SimpleDateFormat。

DateFormat 的作用是格式化Date。它支持格式化風格包括 FULL、LONG、MEDIUM 和 SHORT 共4種:

(01) DateFormat.SHORT

完全為數字,如 12.13.52 或 3:30pm

(02) DateFormat.MEDIUM

較長,如 Jan 12, 1952

(03) DateFormat.LONG

更長,如 January 12, 1952 或 3:30:32pm

(04) DateFormat.FULL

是完全指定,如 Tuesday、April 12、1952 AD 或 3:30:42pm PST。

DateFormat 的定義如下

public abstract class NumberFormat extends Format {}

DateFormat 的函數接口

// 默認構造函數
DateFormat()
      
// 非構造函數
Object                   clone()
boolean                  equals(Object object)
abstract StringBuffer    format(Date date, StringBuffer buffer, FieldPosition field)
final StringBuffer       format(Object object, StringBuffer buffer, FieldPosition field)
final String             format(Date date)
static Locale[]          getAvailableLocales()
Calendar                 getCalendar()
final static DateFormat     getInstance()
final static DateFormat     getDateInstance()
final static DateFormat     getDateInstance(int style)
final static DateFormat     getDateInstance(int style, Locale locale)
final static DateFormat     getTimeInstance()
final static DateFormat     getTimeInstance(int style)
final static DateFormat     getTimeInstance(int style, Locale locale)
final static DateFormat     getDateTimeInstance()
final static DateFormat     getDateTimeInstance(int dateStyle, int timeStyle)
final static DateFormat     getDateTimeInstance(int dateStyle, int timeStyle, Locale locale)
NumberFormat     getNumberFormat()
TimeZone         getTimeZone()
int              hashCode()
boolean          isLenient()
Date             parse(String string)
abstract Date    parse(String string, ParsePosition position)
Object           parseObject(String string, ParsePosition position)
void             setCalendar(Calendar cal)
void             setLenient(boolean value)
void             setNumberFormat(NumberFormat format)
void             setTimeZone(TimeZone timezone)

注意:DateFormat是一個抽象類。

當我們通過DateFormat的 getInstance(), getDateInstance()和getDateTimeInstance() 獲取DateFormat實例時;實際上是返回的SimpleDateFormat對象。

下面的函數實際上都是返回的SimpleDateFormat對象。

final static DateFormat getInstance()
final static DateFormat getTimeInstance()
final static DateFormat getTimeInstance(int style)
final static DateFormat getTimeInstance(int style, Locale locale)
final static DateFormat getDateInstance()
final static DateFormat getDateInstance(int style)
final static DateFormat getDateInstance(int style, Locale locale)
final static DateFormat getDateTimeInstance()
final static DateFormat getDateTimeInstance(int dateStyle, int timeStyle)
final static DateFormat getDateTimeInstance(int dateStyle, int timeStyle, Locale locale)

這些函數在SimpleDateFormat.java中的定義如下:

public static final int FULL = 0;
public static final int LONG = 1;
public static final int MEDIUM = 2;
public static final int SHORT = 3;
public static final int DEFAULT = MEDIUM;
      
public final static DateFormat getInstance() {
    return getDateTimeInstance(SHORT, SHORT);
}
      
public final static DateFormat getTimeInstance()
{
    return get(DEFAULT, 0, 1, Locale.getDefault());
}
      
public final static DateFormat getTimeInstance(int style)
{
    return get(style, 0, 1, Locale.getDefault());
}
      
public final static DateFormat getTimeInstance(int style,
                                             Locale aLocale)
{
    return get(style, 0, 1, aLocale);
}
      
public final static DateFormat getDateInstance()
{
    return get(0, DEFAULT, 2, Locale.getDefault());
}
      
public final static DateFormat getDateInstance(int style)
{
    return get(0, style, 2, Locale.getDefault());
}
      
public final static DateFormat getDateInstance(int style,
                                             Locale aLocale)
{
    return get(0, style, 2, aLocale);
}
      
public final static DateFormat getDateTimeInstance()
{
    return get(DEFAULT, DEFAULT, 3, Locale.getDefault());
}
      
public final static DateFormat getDateTimeInstance(int dateStyle,
                                                   int timeStyle)
{
    return get(timeStyle, dateStyle, 3, Locale.getDefault());
}
      
public final static DateFormat
    getDateTimeInstance(int dateStyle, int timeStyle, Locale aLocale)
{
    return get(timeStyle, dateStyle, 3, aLocale);
}
      
/**
 * 獲取DateFormat實例,實際上是返回SimpleDateFormat對象。
 * 
 * timeStyle -- 值可以為“FULL”或“LONG”或“MEDIUM”或“SHORT”
 * dateStyle -- 值可以為“FULL”或“LONG”或“MEDIUM”或“SHORT”
 * flags     -- 值可以為“1”或“2”或“3”。
 *       1 表示獲取“時間樣式”
 *       2 表示獲取“日期樣式”
 *       3 表示獲取“時間和日期樣式”
 * loc       -- locale對象,表示“區域”
 */
private static DateFormat get(int timeStyle, int dateStyle,
                              int flags, Locale loc) {
    if ((flags & 1) != 0) {
        if (timeStyle < 0 || timeStyle > 3) {
            throw new IllegalArgumentException("Illegal time style " + timeStyle);
        }
    } else {
        timeStyle = -1;
    }
    if ((flags & 2) != 0) {
        if (dateStyle < 0 || dateStyle > 3) {
            throw new IllegalArgumentException("Illegal date style " + dateStyle);
        }
    } else {
        dateStyle = -1;
    }
    try {
        // Check whether a provider can provide an implementation that's closer 
        // to the requested locale than what the Java runtime itself can provide.
        LocaleServiceProviderPool pool =
            LocaleServiceProviderPool.getPool(DateFormatProvider.class);
        if (pool.hasProviders()) {
            DateFormat providersInstance = pool.getLocalizedObject(
                                                DateFormatGetter.INSTANCE,
                                                loc, 
                                                timeStyle,
                                                dateStyle,
                                                flags);
            if (providersInstance != null) {
                return providersInstance;
            }
        }
      
        return new SimpleDateFormat(timeStyle, dateStyle, loc);
    } catch (MissingResourceException e) {
        return new SimpleDateFormat("M/d/yy h:mm a");
    }
}

通過上面的代碼,我們能夠進一步的認識到:DateFormat的作用是格式化Date;幫助我們將Date轉換成我們需要的String字符串。DateFormat提供的功能非常有限,它只能支持FULL、LONG、MEDIUM 和 SHORT 這4種格式。而且,我們獲取DateFormat實例時,實際上是返回的SimpleDateFormat對象。

DateFormat 實例

下面,我們通過實例學習使用DateFormat的常用API。

源碼如下(DateFormatTest.java):

import java.util.Date;
import java.util.Locale;
import java.text.DateFormat;
import java.text.FieldPosition;
      
/**
 * DateFormat 的API測試程序
 *
 * @author skywang
 * @email [email protected]
 */
public class DateFormatTest {
          
    public static void main(String[] args) {
      
        // 只顯示“時間”:調用getTimeInstance()函數
        testGetTimeInstance() ;
      
        // 只顯示“日期”:調用getDateInstance()函數
        testGetDateInstance() ;
      
        // 顯示“日期”+“時間”:調用getDateTimeInstance()函數
        testGetDateTimeInstance() ;
              
        // 測試format()函數
        testFormat();
    }
      
    /**
     * 測試DateFormat的getTimeInstance()函數
     * 它共有3種重載形式:
     * (01) getTimeInstance()
     * (02) getTimeInstance(int style)
     * (03) getTimeInstance(int style, Locale locale)
     *
     * @author skywang
     */
    private static void testGetTimeInstance() {
        Date date = new Date(); 
      
        //Locale locale = new Locale("fr", "FR");
        Locale locale = new Locale("zh", "CN"); 
      
        // 等價於 DateFormat.getTimeInstance( DateFormat.MEDIUM); 
        DateFormat short0  = DateFormat.getTimeInstance( ); 
      
        // 參數是:“時間的顯示樣式”
        DateFormat short1  = DateFormat.getTimeInstance( DateFormat.SHORT); 
        DateFormat medium1 = DateFormat.getTimeInstance( DateFormat.MEDIUM); 
        DateFormat long1   = DateFormat.getTimeInstance( DateFormat.LONG); 
        DateFormat full1   = DateFormat.getTimeInstance( DateFormat.FULL); 
        // 查看本欄目
  1. 上一頁:
  2. 下一頁:
Copyright © 程式師世界 All Rights Reserved