Just a Computer Graphics Studio & My Life

由於在寫一個有趣的APP,想要讓使用者可以輸入日期—年、月、日,我需要驗證日期是否合理,再把年、月、日送到server當作參數,之後server就會吐出相對應的結果給我。 很簡單地直接找現成的code,其實依照大學程式設計的練習,或是寫ACM的題目,思路清楚的話很容易就能寫出來。

判斷日期是否合理:首先有分大月31天、小月30天,另外二月在閏年有29天、非閏年有28天。

那怎麼判斷閏年呢?不可以被100整除但可以被4整除,或者可以被400整除,只要符合兩者其中之一,即是閏年。

以下程式碼就是在做上述的邏輯,只是我把年限制在1600-2100年之間,要是合理的日期丟入method,就會回傳true,否則為false。

- (BOOL)validateDateForMonth:(int)month day:(int)day year:(int)year
{
    bool validation = true;
    if(!(year >= 1600 && year <=2100)) {
        validation = false;
    }
    if(day < 1) {
        validation = false;
    }
    switch(month)
    {
        case 2:
            if([self leapYear:year]) { // We only care about leap years in February
                if(day > 29) {
                    validation = false;
                }
            }
            else {
                if(day > 28) {
                    validation = false;
                }
            }
            break;
        case 1: case 3: case 5: case 7: case 8: case 10: case 12:
            if(day > 31) {
                validation = false;
            }
            break;
        case 4: case 6: case 9: case 11:
            if(day > 30) {
                validation = false;
            }
            break;
        default: // the month is not between 1 and 12
            validation = false;
            break;
    }
    return validation;
}

- (BOOL)leapYear:(int)year
{
    return (year % 100 != 0 && year % 4 == 0) || (year % 400 == 0);
}

參考:老闆。

Advertisements

發表留言

在下方填入你的資料或按右方圖示以社群網站登入:

WordPress.com Logo

您的留言將使用 WordPress.com 帳號。 登出 / 變更 )

Twitter picture

您的留言將使用 Twitter 帳號。 登出 / 變更 )

Facebook照片

您的留言將使用 Facebook 帳號。 登出 / 變更 )

Google+ photo

您的留言將使用 Google+ 帳號。 登出 / 變更 )

連結到 %s

標籤雲

%d 位部落客按了讚: