티스토리 뷰
C#이나 MFC 나 JAVA 나 모두 Calender 클래스나 Date비스무리한 스트럭처가 있지만, 간혹 XXX때문에 달력 로직을
연산해야 하는 무척이나 귀찮은 경우가 있다. 그럴 경우 써먹자;;
// Calender.cpp : Defines the entry point for the console application.
//
#include "stdafx.h"
#include <stdio.h>
void print(); // 전체 출력함수
void thirtyone(int year,int month); //31일로 끝나는 달 함수
void twentyeight(int year,int month);// 2월 함수
void thirty(int year,int month); // 30일로 끝나는 달 함수
void main()
{
print(); // 달 출력을 한다
}
void print()
{
int month = 1; // 처음엔 1월이니까 1로 초기화시킨다
int year;
printf("년도를 입력하세요 : ");
scanf("%d",&year);
while(month != 13) // 13월은 없으므로 12월까지 반복
{
printf("\t(%d)월",month);
printf("\n 일 월 화 수 목 금 토\n");
if((month == 1) || (month == 3) || (month == 5) || (month == 7) || (month == 8) || (month == 10) || (month == 12))
{
thirtyone(year,month); // 년도와 달 값이 31일 함수로 들어간다
}
else if((month == 2))
{
twentyeight(year,month); // 년도와 달 값이 2월 함수로 들어간다
}
else if((month == 4) || (month == 6) || (month == 9) || (month == 11))
{
thirty(year,month); // 년도와 달 값이 30일 함수로 들어간다
}
month++; // 한 달이 끝나면 증가
printf("\n\n");
}
}
void thirtyone(int year,int month)
{
printf("=====\n");
int i , j , count = 1, th , week;
if(month == 1) // 1월이면 작년을 기준으로 해야함
year--,month +=12;
th = year / 100;
year = year % 100;
week = ((21 * th / 4) + (5 * year / 4) + (26 * (month + 1)) / 10) % 7;
//첫 번째 1일을 구하는 공식
for( i = 0 ; i <= 5 ; i++ )
{
for( j = 0 ; j < 7 ; j++ ){
if(i == 0 && j < week)
printf(" ");
else{
printf("%4d",count++);
if(count > 31)
{
return ; // 31일 까지 출력후 함수종료
}
}
}
printf("\n");
}
return;
}
void twentyeight(int year,int month)
{
int i , j , count = 1, th , week ,year_1;
year_1 = year ;
if(month == 2) // 2월일경우도 작년을 기준으로 해야함
year--,month+=12;
th = year / 100;
year_1 = year % 100;
week = ((21 * th / 4) + (5 * year_1 / 4) + (26 * (month + 1)) / 10) % 7;
year++; // 작년 기준으로 해서 1일을 구한후 윤년을 구하기위해 다시 원래의 값으로 함
for( i = 0 ; i <= 4 ; i++ )
{
for( j = 0 ; j < 7 ; j++ )
{
if(i == 0 && j < week)
printf(" ");
else
{
if ( (year % 4 == 0) && (year % 100 != 0) || (year % 400 == 0) ) // 윤년일 경우 29일까지 출력
{
if(count <= 29)
printf("%4d",count++);
}
else
{
if(count <= 28)
printf("%4d",count++);
}
}
}
printf("\n"); // 한주가 끝나면 줄 바꿈
}
return ;
}
void thirty(int year,int month)
{
int i , j , count = 1, th , week;
th = year / 100;
year = year % 100;
week = ((21 * th / 4) + (5 * year / 4) + (26 * (month + 1)) / 10) % 7;
for( i = 0 ; i <= 5 ; i++ )
{
for( j = 0 ; j < 7 ; j++ )
{
if(i == 0 && j < week)
printf(" ");
else
{
printf("%4d",count++);
if(count > 30) // 30일까지 출력
{
return ;
}
}
}
printf("\n"); // 한주가 끝나면 줄 바꿈
}
}
- Total
- Today
- Yesterday
- 엑스포다리
- 2MB 개새끼
- Don't let me be misunderstood
- 날자계산
- 대청호
- Java
- 수락계곡
- 윈도우 제거된 디바이스 드라이버
- 남자는 키
- 자바스크립트
- spring-boot #java
- ckeditor5 #custom image file insert #uploads
- 시동 안걸릴때 여자들은?
- 공돌/공순 애인님 관리법
- 놈놈놈
- kde 전환
- 18-70mm
- 대둔산
- 나는 아직 살아있는건가
- 섹스와 남자들의 착각
- Java Applet
- Mista Swing
- 멀티바이트 와이드 문자열 변경
- 랜 연결상태
- gettimeofday
- Java PermGen eclipse 이클립스 메모리 부족
- Signed applet
- 정규식 Regex
- 코드 예시
- D200
일 | 월 | 화 | 수 | 목 | 금 | 토 |
---|---|---|---|---|---|---|
1 | 2 | 3 | 4 | |||
5 | 6 | 7 | 8 | 9 | 10 | 11 |
12 | 13 | 14 | 15 | 16 | 17 | 18 |
19 | 20 | 21 | 22 | 23 | 24 | 25 |
26 | 27 | 28 | 29 | 30 | 31 |