2014-04-03 46 views
1

我找到了java.text.DateFormat有兩種格式化日期的方法。一個是取Date參數,另一個取Object參數。我檢查了DateFormat源代碼,看起來他們調用不同的內部方法。Date.format(Date)vs. Date.format(Object)

我的問題是我應該用哪種方法(方法)來格式化日期? WAY 1對2路

這裏是我的代碼:

Object dateObject; // This is an instance of java.util.Date 

DateFormat df = this.createDateFormat(); 

String formatted1 = df.format ((Date) dateObject); // WAY 1 

String formatted2 = df.format (dateObject); // WAY 2 -- Calling different internal method. 

注意的是,對於WAY 1,我投給dateObject java.util.Date

任何人有任何想法?謝謝。

回答

1

沒關係。 format(Object)是基礎接口Format的一部分;爲了清楚起見,DateFormat也提供了format(Date)

最終,format(Object)版本調用DateFormat.format(Object, StringBuffer, FieldPosition),其從the source,會試圖在以下,爲了:

  • 如果對象是一個Date,投射到Date並執行相同的轉換爲format(Date)
  • 如果對象是Number,則構造一個new Date(((Number)object).longValue())然後對其進行格式化。
  • 否則,拋出IllegalArgumentException

即第一點使得format(Object)相同format(Date)當對象是一個Date

就你而言,由於日期是Object,所以我只是簡單地使用format(Object),因爲它不那麼冗長,並且format(Object)會爲你做演員。

+0

謝謝。我認爲這是正確的答案! – Loc

+0

@Loc如果有疑問,並且文檔本身不具體,您可以隨時前往http://grepcode.com/在線查看各種版本的源代碼(或者查看JDK源代碼是否包含在內在你的發行版中)。 ['DateFormat.format(Object,StringBuffer,FieldPosition)'](http://bit.ly/1eexL5y)的文檔實際上確實保證了這種行爲,雖然它與'format(Object)'的連接並不是立即顯而易見的。 –

+0

是的。我再次檢查了代碼,你的解釋是正確的。我之前檢查過但我沒有看到這個功能。我的錯。 – Loc

0

你WAY1方法是從DateFormat類,WAY2方法是從Format類(祖先的DateFormat)。我認爲這兩種方式調用格式方法從DateFormat所以兩種方式是等價的。