Contents

Develop
2003.04.23 11:15

[c] 날짜로 요일 찾기..

조회 수 8513 댓글 0
?

단축키

Prev이전 문서

Next다음 문서

크게 작게 위로 아래로 댓글로 가기 인쇄
?

단축키

Prev이전 문서

Next다음 문서

크게 작게 위로 아래로 댓글로 가기 인쇄
날짜를 입력하면 요일을 출력하는 함수입니다. Zeller 의 함수라고 하죠.
그 외에도 날짜에 관련된 함수들이 몇몇 있습니다. 
각 함수들마다 주석을 달아놓았으니 참고하시길..

/* year가 윤년이면 1을, 아니면 0을 리턴한다.*/
/* 이 함수는 매크로 함수로 만들어도 된다.   */
int is_leap_year(int year){
    if(year % 400 == 0) return(1);
    else if(year % 100 == 0) return(0);
    else if(year % 4 == 0) return(1);
    else return(0);
}

/* year년 month월의 마지막 날을 숫자로 리턴한다. */
int get_last_day(int year, int month){
    if(month == 2) {
        if(is_leap_year(year)) return(29);
        else return(28);
    }
    else if(month==2 || month==4 || month==6 || month==9 || month==11) return(30);
    else return(31);
}

/* year년 month월 day일이라는 날짜가 없으면 0을, 있으면 1을 리턴한다. */
int valid_date(int year, int month, int day){
    if(year < 0 || month < 1 || month > 12) return (0);
    if(day < 1 || day > get_last_day(year, month)) return(0);
    return(1);
}

/* start_year년 1월 1일부터 year년 month월 day일까지 경과된 날 수를 리턴한다. */
long get_passed_day(int year, int month, int day, int start_year){
    long passed_day;
    int i;

    passed_day=day-1;
    /* 윤년이면 366일을 더하고,평년이면 365일을 더한다. */
    for(i=start_year; i<year; i++)
        if(is_leap_year(i)) passed_day+=366;
        else passed_day+=365;
    for(i=1; i<month; i++) passed_day+=get_last_day(year, month);
    return(passed_day);
}

char *(day_of_week[7])={"일","월","화","수","목","금","토"};

/* Zeller의 함수를 이용하여 year년 month월 day일의 요일을 계산한다. */
/* 일요일은 0,월요일은 1 과 같은 식으로 리턴된다.                   */
int zeller(int year, int month, int day){
    int year_of_century, century, day_of_week;

    /* Zeller의 함수에 사용될 수 있도록 year와 month를 보정 */
    if (month==1 || month==2) year--;
    month=(month+9) % 12 + 1;        /* Jan=11, Feb=12, Mar=1, ... */
    year_of_century = year % 100;    /* 예 : 91 of 1991            */
    century = year / 100;            /* 예 : 19 of 1991            */
     
    day_of_week = ((13*month-1) / 5 + day + year_of_century +  
                      year_of_century / 4 + century / 4 - 2 * century) % 7;
    if (day_of_week < 0) day_of_week = (day_of_week + 7) % 7;
    return(day_of_week);
}


?

List of Articles
번호 분류 제목 글쓴이 날짜 조회 수
609 Develop [c#] 파일(File) 쓰기 ㅎㅎ hooni 2013.04.23 13311
608 Develop [php] 한샘 전자발주 시스템.. file hooni 2013.04.23 12010
607 Develop [jsp] RSS(xml) 파싱해서 보여주기 ㅎㅎ file hooni 2013.04.23 13222
606 System/OS [windows] 최근 열어본 문서목록 안나오게 하는 방법 hooni 2013.04.23 25543
605 Develop [php] 심플한 게시판 ㅋㅋ 1 file hooni 2013.04.23 13017
604 PPT [ppt] 뚜레쥬르 온라인 마케팅 제안서 file hooni 2013.04.23 23519
603 Develop [c++] 현승이가 준 P2P 프로그램 소스 ㅋㅋ file hooni 2013.04.23 12084
602 Develop [c++] BHO 프로그램 동작 원리.. 간단하게.. hooni 2013.04.23 43130
601 PPT [ppt] 시스템보안 연구실 ppt 템플릿.. (CIST) file hooni 2013.04.23 20909
600 Etc 스파이웨어(BHO) 탐지하는 방법.. hooni 2013.04.23 44443
599 Develop OPT와 CAS에 대한 자료.. (교수님 메일로 보내드린 자료..) file hooni 2013.04.23 13950
598 Develop [doc] 테크니컬 레포트 (BHO 취약점을 이용한 공격) 2 file hooni 2013.04.23 27118
Board Pagination Prev 1 ... 43 44 45 46 47 48 49 50 51 52 ... 98 Next
/ 98