2016-01-13 111 views
0

我有一個對象有一些日期,我想將它們返回到getter中。問題是我需要做Date.toString();因爲我必須打印它們,當日期爲空時,我得到一個NullPointerExceptionJava,設置日期爲0/0/0

我正在考慮在日期爲空時返回日期0/0/0,但我不知道如何設置此值。有什麼辦法嗎?就像new Date(0)返回1970-01-01-00:00:00,有沒有類似的東西,但返回0/0/0?

謝謝!

+5

在調用'toString()'之前,更容易測試日期是否爲空。如果它是空的,你可以打印'0/0/0','null date',或者任何你喜歡的東西。 –

+0

更好的方法是在使用它之前檢查日期是否爲空。 – astuter

回答

9

根據定義,沒有日期0/0/0,因爲沒有第0天也沒有第0個月。一天是集合{1,...,28或30或31}和月份的成員是集{1,... 12}的成員。因此,將0/0/0表示爲Date對象是不可能的 - 而且它是不可能的。

-1

這種簡單的方法可以得到你所需要的,因爲在評論中已經提到你的問題:

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"; 
} 

更新:第二個選擇是不鼓勵的建議在評論中。

+3

請不要使用第二種選擇。 –

+0

@ThiagoPorciúncula你能解釋一下爲什麼嗎?我很好奇,如果這是一個不好的做法,我不知道,我想改善。 – saljuama

+0

@saljuama故意引發異常是一種不好的做法,因爲不應拋出異常,應該避免它們。它們的主要用途是僅用於調試代碼,而不用於發佈版本。 – Lefteris008

0

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定義一天,而不是由執行(這意味着它是不是有意的限制,這是它的概念的一部分)。

+0

@ user2642282是的,我看到它,我承認它。我說的是完全一樣的東西。但除了我對格里高利日曆的限制(您也注意到)的澄清之外,我正在爲deusex12提供解決方案。 – Lefteris008

+1

這是不是一個限制,公曆中沒有第0年。請參閱https://en.wikipedia.org/wiki/0_(年) –

+0

好吧,使用「限制」這個詞時,如果它的概念不包含零年,那麼它就是其中的一部分。我們能否回到爲他的問題提供可行的解決方案,而不是試圖發揮我的話語?因爲我可以看到,你迄今只發布了公曆的定義。 – Lefteris008