time() 으로 돌아오는 값은 epoch (1970년 1월1일0초) 로 부터 현재까지 초과한 시간을 초단위로 나타낸 값이 돌아 오지요. 이것을 이용해서 그냥 pgsql 로 SQL 문을 이용하여 입력하면 될 것 같습니다.
개념적으로 표시하면 다음과 같은 것이 가능할 것 같습니다.
sys_time = time();
query_str = "insert into table_name(time_field) "
"values (datetime(sys_time))";
DoPgsqlQuery( query_str );
이런식으로 알고리듬이면 충분하리라 생각됩니다.
굳이 저런식으로 넣을 이유가 있는지요.
> 시스템의 현재 날짜를 얻어서 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년으로 출력이 되질 않습니다. 많은 사이트와 게시판들을 뒤져
> 보아도 명쾌한 해답이 없군요, 고수님들 부탁드립니다.
|