본문 바로가기
개발/C, C++

C 언어에서 날짜 구하기

by 피로물든딸기 2021. 7. 24.
반응형

C, C++ 전체 링크

 

C에서 현재 날짜를 구하기 위해서는 <time.h> 헤더를 사용한다.

 

base = 0일 때, tm* t에 localtime(&base)를 주고,

year에는 1900, month에는 1을 더하면 1970년 1월 1일이 나온다.

 

즉, base = 0일 때, 1970년 1월 1일을 기준으로 날짜를 계산할 수 있다.

 

아래의 코드를 실행해보자.

#include <stdio.h>
#include <time.h>

int main(void)
{
	struct tm* t;
	time_t base = 0;

	t = localtime(&base);

	printf("%d %d %d\n", t->tm_year + 1900, t->tm_mon + 1, t->tm_mday);

	return 0;
}

 

현재 날짜를 구하고 싶다면 base = time(NULL)을 주면 된다.

#include <stdio.h>
#include <time.h>

int main(void)
{
	struct tm* t;
	time_t base = time(NULL);

	t = localtime(&base);

	printf("%d %d %d\n", t->tm_year + 1900, t->tm_mon + 1, t->tm_mday);

	return 0;
}

현재 글을 작성한 날짜인 7월 24일이 나오는 것을 알 수 있다.


아래와 같이 응용도 가능하다.

 

만약 로또 추첨 번호의 해당 날짜를 구하고 싶다면 어떻게 할까?

 

2021년 7월 24일은 973회이다.

즉, getTime(973)은 year = 2021, month = 7, day = 24를 return 한다.

 

로또 회차는 일주일 간격이므로 7(일) x 24(시간) x 60(분) x 60(초) = 604800에 회차를 곱하면 된다.

최초로 로또 복권을 시작한 날짜가 2002년 11월 30일이므로 base는 1038620800가 된다.

 

따라서 아래의 getTime 함수를 구현할 수 있다.

#include <stdio.h>
#include <time.h>

typedef struct _MYTIME
{
	int year;
	int month;
	int day;
}MYTIME;

MYTIME getTime(int result)
{
	struct tm* t;
	time_t BASEDAY = 1038620800 + 604800 * result;
	MYTIME ret;

	t = localtime(&BASEDAY);

	ret.year = t->tm_year + 1900;
	ret.month = t->tm_mon + 1;
	ret.day = t->tm_mday;

	return ret;
}

int main(void)
{
	int result = 973;
	MYTIME lottoDate = getTime(result);

	printf("%d회 로또 추첨 날짜 : %d %d %d\n", result, lottoDate.year, lottoDate.month, lottoDate.day);

	return 0;
}

반응형

댓글