반응형
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;
}
반응형
'개발 > C, C++' 카테고리의 다른 글
C++ - 상수형 메서드와 mutable, const_cast<> (0) | 2021.07.28 |
---|---|
C++ - 생성자 초기화 리스트 (Constructor Member Initializer List) (0) | 2021.07.26 |
C++ - 함수 템플릿 (Function Template) (0) | 2021.07.22 |
허상 포인터 (Dangling Pointer) (0) | 2021.07.18 |
구조체의 크기 (0) | 2021.06.19 |
댓글