我有一個對象有一些日期,我想將它們返回到getter中。問題是我需要做Date.toString();
因爲我必須打印它們,當日期爲空時,我得到一個NullPointerException
。Java,設置日期爲0/0/0
我正在考慮在日期爲空時返回日期0/0/0,但我不知道如何設置此值。有什麼辦法嗎?就像new Date(0)
返回1970-01-01-00:00:00,有沒有類似的東西,但返回0/0/0?
謝謝!
我有一個對象有一些日期,我想將它們返回到getter中。問題是我需要做Date.toString();
因爲我必須打印它們,當日期爲空時,我得到一個NullPointerException
。Java,設置日期爲0/0/0
我正在考慮在日期爲空時返回日期0/0/0,但我不知道如何設置此值。有什麼辦法嗎?就像new Date(0)
返回1970-01-01-00:00:00,有沒有類似的東西,但返回0/0/0?
謝謝!
根據定義,沒有日期0/0/0,因爲沒有第0天也沒有第0個月。一天是集合{1,...,28或30或31}和月份的成員是集{1,... 12}的成員。因此,將0/0/0表示爲Date對象是不可能的 - 而且它是不可能的。
這種簡單的方法可以得到你所需要的,因爲在評論中已經提到你的問題:
public String dateString(Date date) {
if (date != null)
return date.toString();
else
return "0/0/0";
}
或
String dateString;
try {
dateString = date.toString();
}
catch(NullPointerException e) {
dateString = "0/0/0";
}
更新:第二個選擇是不鼓勵的建議在評論中。
請不要使用第二種選擇。 –
@ThiagoPorciúncula你能解釋一下爲什麼嗎?我很好奇,如果這是一個不好的做法,我不知道,我想改善。 – saljuama
@saljuama故意引發異常是一種不好的做法,因爲不應拋出異常,應該避免它們。它們的主要用途是僅用於調試代碼,而不用於發佈版本。 – Lefteris008
Java使用沒有0年的格里曆日曆。另外,您必須記住,現在也有零個月。將月份設置爲'0'將導致獲得1月份,因爲月份基於0-索引。零日也不存在。 假設你得到並返回「現代」日期(AD),你可以在BC時代設置你的「下界」日期。所以,當你得到一個null日期,你可以返回一個BC日期來區分它與你的實際。下面的代碼:
Calendar cal = Calendar.getInstance();
cal.set(Calendar.ERA, GregorianCalendar.BC); //Set the BC era
cal.set(Calendar.YEAR, 1); //Set the year to 1 BC
cal.set(Calendar.MONTH, 0); //Set the month to January
cal.set(Calendar.DAY_OF_MONTH, 1); //Set the day to 1st
DateFormat df = new SimpleDateFormat("yyyy MMM d G"); //Format the date
String returnedDate = df.format(cal.getTime()); //Generate a String of it for other use
您可以在代碼自定義您的需要,如果你也正在得到BC時代日期(也許通過設置一個更老的日期)。
編輯:你當然可以用什麼其他的建議,即檢查空和返回一個字符串"0/0/0"
但這可能以後會導致更多的問題,當你將嘗試解析上述字符串。另外,由於根據定義0/0/0不是格里曆中的有效日期(請參見說明),因此應避免使用此「通配符」字符串並設置實際日期,如上所述。
澄清:公曆並不在Java中既不包含0年或0一個月0定義一天,而不是由執行(這意味着它是不是有意的限制,這是它的概念的一部分)。
@ user2642282是的,我看到它,我承認它。我說的是完全一樣的東西。但除了我對格里高利日曆的限制(您也注意到)的澄清之外,我正在爲deusex12提供解決方案。 – Lefteris008
這是不是一個限制,公曆中沒有第0年。請參閱https://en.wikipedia.org/wiki/0_(年) –
好吧,使用「限制」這個詞時,如果它的概念不包含零年,那麼它就是其中的一部分。我們能否回到爲他的問題提供可行的解決方案,而不是試圖發揮我的話語?因爲我可以看到,你迄今只發布了公曆的定義。 – Lefteris008
在調用'toString()'之前,更容易測試日期是否爲空。如果它是空的,你可以打印'0/0/0','null date',或者任何你喜歡的東西。 –
更好的方法是在使用它之前檢查日期是否爲空。 – astuter