Develop
2003.04.23 11:15

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

조회 수 8557 추천 수 0 댓글 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
번호 분류 제목 글쓴이 날짜 조회 수
249 Develop [c++] 가짜 인증서(하나은행) 프로그램 file hooni 2013.04.23 10787
248 Develop [php] XE 관리자 IP대역 설정 오류 해결법 hooni 2014.02.10 10825
247 Develop [c] 거리와 각도를 입력받아서 좌표로 변환 file hooni 2013.04.23 10849
246 Develop [js] 순환참조에 의한 메모리 누수 관련 file hooni 2013.12.17 10866
245 Develop [unix] 로그파일 정리 쉘스크립트 hooni 2014.02.19 10886
244 Develop [python] 파이썬 공부하는 사이트~ hooni 2013.11.12 10898
243 Develop [c] scanf(), printf() 포맷의 형변환 hooni 2003.04.23 10906
242 Develop [ios] 한샘 카달로그 앱 소스 (아이폰용) secret hooni 2013.04.23 10922
241 Develop [js] IE에서 인쇄 설정 팁 hooni 2013.04.23 10925
240 Develop [c] 소수 구하기 #2 (입력한 숫자가 소수인지 판별하기..) hooni 2013.04.23 11013
239 Develop [c] 네트워크 트래릭 모니터링.. 졸업작품.. 2 file hooni 2013.04.23 11084
238 Develop [c++] SetWindowPos함수를 이용한 크기조절 예제 1 file hooni 2013.04.23 11119
237 Develop [자료구조] 트리(tree) 용어정리 file hooni 2003.04.23 11120
236 Develop [iphone] 파일 업로드 샘플 코드 ㅎㅎ secret hooni 2013.04.23 11120
235 Develop [c] 파일입출력, 링크리스트(linked list)를 이용한 주소록(도스용) 소스코드 1 file hooni 2003.04.23 11199
234 Develop [c] 최대공약수, 최소공배수, 서로소 구하기 (펌) hooni 2013.04.23 11208
Board Pagination Prev 1 ... 36 37 38 39 40 ... 53 Next
/ 53