시스템의 현재 날짜를 얻어서 pgsql DB에 저장하는 루틴을 작성하던중
버그가 생겼습니다. 1999년까지는 문제가 없는데 2000년 부터 년도가 0100으로 (2001년일 경우 0101) 되어버리는 군요. 아래의 test용 루틴을 보시고 해결해 주실분을 찾습니다.
#include <unistd.h>
#include <time.h>
#include <stdlib.h>
#include <string.h>
#include <stdio.h>
int main()
{
time_t cal_time;
struct tm *parsed_time;
char *pstr;
char buf[1024];
char *month_val[] = {
"Jan", "Feb", "Mar", "Apr", "May", "Jun",
"Jul", "Aug", "Sep", "Oct", "Nov", "Dec"};
cal_time = time(&cal_time);
if (time(&cal_time) < 0)
{
fprintf(stderr, "Can't get current time(%s:%d)!\n", __FILE__, __LINE__);
exit(/1);
}
parsed_time = localtime(&cal_time);
/* DATETIME('16/Jul/1998'::datetime, '06:37:59'::time)*/
sprintf(buf, "DATETIME('%d/%s/%d'::datetime,'%d:%d:%d'::time)",
parsed_time/>tm_mday, month_val[parsed_time/>tm_mon], parsed_time/>tm_year,
parsed_time/>tm_hour, parsed_time/>tm_min, parsed_time/>tm_sec);
pstr = (char *)malloc(strlen(buf) + 1);
strcpy(pstr, buf);
printf("%s",pstr);
return pstr;
}
이렇게 하고 출력을 하면 다음과 같이 출력되는데
DATETIME('23/Jan/0100'::datetime,'18:29:36'::time)
년도가 2000년으로 출력이 되질 않습니다. 많은 사이트와 게시판들을 뒤져보아도 명쾌한 해답이 없군요, 고수님들 부탁드립니다.
|