![](/img/trans.png)
[英]Determine if a year is leap and if a date is valid in Blackberry
[英]Java Valid Date Leap Year
這是我更新的代碼,它仍然無效。 它返回2月29日的所有案例的日期,如果它是閏年,它應該只返回一天,如果它不是閏年,則應返回1。
public int checkDay (int day)
{
// For months with 30 days.
if ((month == 4 || month == 6 || month == 9 || month == 11) && day <= 30)
return day;
// For months with 31 days.
if ((month == 1 || month == 3 || month == 5 || month == 7 || month == 8 || month == 10 || month == 12) && (day <= 31))
return day;
// For leap years.
// If February 29th...
if (month == 2 && day == 29)
{
// Check if year is a leap year.
if ((year%4 == 0 && year%100!=0) || year%400 == 0)
{
// If year is a leap year return day as 29th.
return day;
}
// If not a leap year, return day as 1st.
else return 1;
}
// If Date if February 1st through 28th return day, as it is valid.
if (month == 2 && (day >= 1 && day <= 28))
return day;
// Return day as 1st for all other cases.
return 1;
}
試試GregorianCalendar http://docs.oracle.com/javase/6/docs/api/java/util/GregorianCalendar.html
GregorianCalendar gc = new GregorianCalendar();
if (gc.isLeapYear(year) )
嘗試將代碼更改為
if (year%4==0&&(year%100!=0&&year%400==0))
if ((year%4==0 && year%100!=0) || year%400==0)
這解決了你的問題,你的邏輯是假的:)
嘗試此代碼:如果返回的布爾值為false,則可以將日期設置為1,因為日期無效。
public bool checkDay (int day, int month, int year){
bool valid = false;
if(day >=1){
// For months with 30 days.
if ((month == 4 || month == 6 || month == 9 || month == 11) && day <= 30){
valid = true;
}
// For months with 31 days.
if ((month == 1 || month == 3 || month == 5 || month == 7 || month == 8 || month == 10 || month == 12) && day <= 31){
valid = true;
}
// For February.
if (month == 2)
{
if(day <= 28){
valid = true;
} else if(day == 29){
if ((year%4 == 0 && year%100!=0) || year%400 == 0){
valid = true;
} //else invalid
}
}
} //else date is not valid
return valid;
}
更好的做法是在每個方法中只有一個return語句。 這使得更容易理解代碼,並通過它來調試它並找到可能的錯誤。 如果您有任何問題,請隨時提出。
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.