Programming/C

C언어 날짜계산 예제

fishersheep 2021. 8. 13. 01:23
반응형
#define _CRT_SECURE_NO_WARNINGS
#include <stdio.h>
#include <conio.h>

long total_days(int year, int month, int day);
void calculateDate(long total);
void calculateDate2(long total);

int main(void)
{
	int year, month, day, dayafter;
	long total;

	printf("기준일 (년월일) 입력 : ");
	scanf("%d %d %d", &year, &month, &day);
	printf("몇일 후 날수 입력:");
	scanf("%d", &dayafter);



	total = total_days(year, month, day) + dayafter - 1;
	printf("총 날짜 수 : %ld\n", total);

	calculateDate2(total);
	_getch();
	return 0;
}
long total_days(int year, int month, int day)
{
	int months[] = { 31, 28, 31, 30, 31, 30, 31, 31, 30, 31, 30, 31 };
	int i;
	long total = 0L;
	total = (year - 1) * 365L + (year - 1) / 4 - (year - 1) / 100 + (year - 1) / 400;
	if (!(year % 4) && year % 100 || !(year % 400))
		months[1]++;
	for (i = 0; i < month - 1; i++)
		total += months[i];
	total += day;
	return total;
}

void calculateDate(long d) {
	int months[] = { 31, 28, 31, 30, 31, 30, 31, 31, 30, 31, 30, 31 };
	int temp_year = d / 365;
	int noOfyoonYear = d / (365 * 4) - d / (365 * 100) + d / (365 * 400);
	int remainDays = d % 365 - noOfyoonYear;
	int year, month, day;
	int i;

	if (remainDays < 0) {
		year = temp_year + remainDays / 365;
		remainDays = 365 + remainDays % 365;
	}
	else { // 0<= remainDays < 365
		year = temp_year + 1;
	}

	if (!(year % 4) && year % 100 || !(year % 400))
		months[1]++;

	for (i = 0; i < 12; i++)
		if (remainDays >= 0)
			remainDays -= months[i];
		else {
			break;
		}

	month = i;
	day = months[i - 1] + remainDays + 1;

	printf("해당 날짜는 %d년 %d월 %d일", year, month, day);
}

void calculateDate2(long d) {
	int months[] = { 31, 28, 31, 30, 31, 30, 31, 31, 30, 31, 30, 31 };

	int noOfyoonYear = d / (365 * 4) - d / (365 * 100) + d / (365 * 400);
	int year = (d - noOfyoonYear) / 365 + 1;
	int remainDays = (d - noOfyoonYear) % 365;
	int  month, day;
	int i;

	if (!(year % 4) && year % 100 || !(year % 400))
		months[1]++;

	for (i = 0; i < 12; i++)
		if (remainDays >= 0)
			remainDays -= months[i];
		else {
			break;
		}

	month = i;
	day = months[i - 1] + remainDays + 1;

	printf("해당 날짜는 %d년 %d월 %d일", year, month, day);
}
반응형

'Programming > C' 카테고리의 다른 글

c언어 모음개수구하기  (0) 2021.08.13
c언어 입력한정수들의 곱셈  (0) 2021.08.13
c언어 주민번호 예제  (0) 2021.08.13
c언어 숫자맞추기 예제  (0) 2021.08.13
c언어 이름,학번,총점 순서정렬하기  (0) 2021.08.13