2011-12-10 54 views
3

我有一個類構造函數:日期在構造函數中的Java

... 
Date d1; 
Date d2; 
public DateClass(Date d1, Date d2) { 
    this.d1 = d1; 
    this.d2 = d2; 
} 
... 

然後在另一個類我想使用這個構造:

... 
DateClass d = new DateClass(what I should I write here to create Date in format mm-dd-yyyy); 
System.out.println(d); 
... 

謝謝! P.S這不屬於作業的一部分。我真的不知道該怎麼做。

回答

3

您可以通過調用構造函數創建一個新Date

// you specify year1, month1, day1 
DateClass d = new DateClass(new Date(year1-1900, month1-1, day1), 
    new Date (year2-1900, month2-1, day2); 

這是最簡單的方法,肯定會奏效;然而,正如Carlos Heuberger正確指出的那樣,這已被棄用,這意味着其他方式更受歡迎。你也可以做一個新Date通過DateFormat

DateFormat df = new SimpleDateFormat("MM-dd-yyyy"); 
Date d1 = df.parse("12-10-2011"); // for example, today's date 
Date d2 = df.parse("01-01-1900"); // use your own dates, of course 

爲了能夠mm-dd-yyyy格式打印,實現toString

public String toString(){ 
    DateFormat df = new SimpleDateFormat("MM-dd-yyyy"); 
    return "Date 1: " + df.format(d1) + " Date 2: " + df.format(d2); 
} 
+3

1 - 建議不推薦使用構造函數。 2 - 應該使用'月1'。 3 - 應該是「1900年」(「2011」或者「11」會導致錯誤的年份)。一起不是最好的選擇......(例如,g'new Date(2011,12,10)'將於3912年1月10日;今天是'新日期(111,11,10)') –

+0

@CarlosHeuberger謝謝你的建議!你是對的。 –

6

Date不是格式。這只是一個瞬間,沒有相關的日曆或時區。當你需要格式化Date,你會經常使用它被告知要使用日曆系統DateFormat,時區,以即時轉換爲本地時間等

當你打印出Date爲你在第二個代碼片段中,通過toString()隱式地執行,即總是使用系統默認時區和一個不可修改的格式。 (它可能會也可能不會隨系統區域更改 - 我不確定)。基本上應該是只有用於調試。如果你想對文本進行任何控制,DateFormat就是它的位置。

如果您希望能夠從年/月/日等簡單構建日期值,我建議你看看Joda Time - 它比Java的更理智的日期/時間API。它使得各種事情變得更加清潔,包括「當地時間」,「當地日期」,「當地日期和時間」,「在特定時區的日期和時間」等的分離等。

+0

我想他的意思剖析的日期與格式,而不是創建具有該格式的日期。 – Tudor

+0

@Tudor:基本不清楚 - 但是我建議使用喬達時間的任何一種方式:) –

3

您需要使用構造SimpleDateFormat(假設你有兩個日期爲字符串):

SimpleDateFormat format = new SimpleDateFormat("MM-dd-yyyy"); 
Date d1 = format.parse(d1String); 
Date d2 = format.parse(d2String); 
DateClass d = new DateClass(d1, d2); 
+0

我其次。請記住,[SimpleDateFormat] [1]不是線程安全的。 [1]:http://docs.oracle.com/javase/7/docs/api/java/text/SimpleDateFormat.html –

+0

what id d1String?你的意思是如果我有08-08-94作爲d1String那麼它的作品? – user1091510

+0

@ user1091510:是 – Tudor