1. 요일을 숫자로 정의하기
1년1월1일을 월요일이고 숫자로 1이라 정의하고
일주일을 7일로 정의하면
7일 % 7=0 == 일요일
따라서 일요일 ~ 토요일은 0 ~ 6
이라고 정의한다.
2. 윤년 여부 판단하기
윤년은 4년마다 발생하는데 예외가 있는데
100년째에는 윤년이 아니고
400년째에는 윤년이다.
이것을 C코드로 표현하면 아래와 같다.
if(Year%4 == 0 && Year%100 != 0 || Year%400 == 0)
{
printf("윤년입니다.");
}
3. 요일 구하기
오늘이 2025년 3월 21일이라면 2024년까지의 모든 일 수를 구하고
2017*365 + ((2017/4 - 2017/100) + 2017/400)
= 739,331
이것은 4로 나누어지는 윤년이었던 해의 일 수를 더해주고 100으로 나누어지는 해의 일 수를 빼주고 400으로 나누어지는 윤년의 일 수를 더해준 값이 1년1월1일부터 직전해까지의 총일수다
오늘 (2025년3월21일)이 무슨 요일인지 계산하면
739,331 + 1월일수(31) + 2월일수(28) + 현재일(21)
= 739,331 % 7 =
= 5 (나머지값이다)
따라서 2025년3월21일은 금요일이다.
4. 월의 일수 및 요일 구하는 C코드
// 주어진 년의 월의 일수 계산
int get_month_day(year, month)
{
if (month == 4 or month == 6 or month == 9 or month == 11)
return 30
else if (month == 2)
{
if (year % 4 == 0 and year % 100 != 0 or year % 400 == 0)
return 29
else
return 28
}
else
return 31
}
// 1년1월1일부터 주어진 날짜까지의 총일수 계산
int get_total_day(year, month, day)
{
// 1년1월1일부터 직전해까지의 총일수
int year_days = (year-1)*365 + ((int((year-1)/4) - int((year-1)/100)) + int((year-1)/400));
// 주어진 날짜까지 주어진 년의 총일수
int month_days = 0
for (int i=1; i <= month; ++i)
month_days += get_month_day(year, i);
return year_days + month_days + day;
}
// 주어진 일의 요일을 영문자 세자리로 표시
string get_weekday(day)
{
day %= 7;
if (day == 0)
return 'SUN' ;
if (day == 1)
return 'MON' ;
if (day == 2)
return 'TUE' ;
if (day == 3)
return 'WED' ;
if (day == 4)
return 'THU' ;
if (day == 5)
return 'FRI' ;
if (day == 6)
return 'SAT' ;
print(get_weekday(get_total_day(2025, 1, 30)));
}
'유용한 정보' 카테고리의 다른 글
[C#] 파일 오픈 및 읽기/쓰기 (0) | 2025.04.15 |
---|---|
[C#] RDLC 리포트 (0) | 2025.04.08 |
[Qt] Qt 프로그래밍 - 윈도우에 설치 (온라인) (0) | 2025.02.27 |
[Qt] Qt 프로그래밍 - 예제 실행 (0) | 2025.02.25 |
[Qt] Qt 프로그래밍 - 윈도우에 설치 (오프라인) (0) | 2025.02.24 |