2015-10-15 143 views
0

我必須編寫一個程序來檢查發票的日期以確保日期正確。到目前爲止,代碼已設置,以便如果輸入的月份> = 1或< = 12,則該月份有效。如果月份> 12或< 1,則該月份自動設置爲0.日期設置類似,如果日期> = 1或< = 31,則該日期有效。如果沒有,那天= 0。我現在需要做的是將天數的限制取決於月份,以便像2015年4月31日這樣的日期不能有效。此外,當月份= 0時,需要設置爲0.我想知道什麼是改善代碼的最有效方法,所以我可以做到這一點?我需要以任何方式實施公曆日曆嗎? 不管怎麼說,這是到目前爲止我的代碼:如果日期在java中無效,如何設置時間爲0(月/日均= 0,如果月或日無效)

 if((day <=31) && (day >= 1)) 
     dayDue = day; 
    else 
     day = 0; 

    if((month >= 1) && (month <= 12)) 
     monthDue = month; 
    else 
     month = 0; 

    if((year >= 2011) && (year <= 2017)) 
     yearDue = year; 
    else 
     year = 0; 
+2

[檢查日期的有效性(http://stackoverflow.com/questions/4528047/checking-the-validity-of-a-date)可能會幫助 – sam

+0

您的評論讓我在正確的軌道上。我會用我用來解決這個問題的代碼來回答我自己的問題,但我相信有一個更簡單的方法。 –

回答

0

不要使用多個if,試試這個。

//02/29/2016 is the next leap year, other are invalid dates 
String[] stringDate = {"04/31/2015", "02/29/2016", "06/40/2015"}; 
SimpleDateFormat dateFormat = new SimpleDateFormat("MM/dd/yyyy"); 
dateFormat.setLenient(false); 

for (String str: stringDate) { 
    try { 
     if(dateFormat.parse(str, new ParsePosition(0)) != null) { 
      System.out.println(str + ": valid"); 
     } else { 
      System.out.println(str + ": Invalid date"); 
     } 
    } catch (Exception e) { 
     e.printStackTrace(); 
    } 
} 

輸出:

2015年4月31日:無效的日期

2016年2月29日:有效

06/40/2015:無效的日期

我們使用SimpleDateFormat來解析和驗證日期。它使用解析操作使用日曆生成日期,如果未找到日期,則返回Null

Demo

+0

感謝您的迴應!我能夠應用您的所有意見來編寫一個可以接受的計劃,以實現我正在嘗試做的事情。我感謝您的幫助。 –

+0

@MynameisIrrelevant不客氣! – sam

0

是我用來解決這個問題(有可能是這樣做一個簡單的方法,但是這是我做的事):

if((day <= 31) && (month == 1 || month == 3 || month == 5 || month == 7 || month == 8 || month == 10 || month == 12)) 
     dayDue = day; 
    else if((day > 31) && (month == 1 || month == 3 || month == 5 || month == 7 || month == 8 || month == 10 || month == 12)) 
     dayDue = 31; 
    else if((day <= 30) && (month == 4 || month == 6 || month == 9 || month == 11)) 
     dayDue = day; 
    else if((day > 30) && (month == 4 || month == 6 || month == 9 || month == 11)) 
     dayDue = 30; 
    else if((day <= 28) && (month ==2)) 
     dayDue = day; 
    else if((day > 28) && (month ==2)) 
     dayDue = 28; 
    //accounting for leap years 
    if ((day == 29) && (month == 2) && (year == 2012 || year == 2016)) 
     dayDue = day; 
    else if((day > 29) && (month == 2) && (year == 2012 || year == 2016)) 
     dayDue = 29; 

    if((month >= 1) && (month <= 12)) 
     monthDue = month; 
    else if(month == 0) 
     day = 0; 
    else 
     month = 0; 
+0

閏年呢?二月有29天。 – robbmj

+0

我的計劃範圍在2011年至2017年之間,因此2012年或2016年2月29日或以上的日子例外。感謝您的回覆 –

相關問題