Date 유틸리티
본 장에서는 날짜 또는 시간 처리의 유틸리티에 해당하는 API를 설명한다.
1. pfmIsValidDate
입력 받은 날짜의 정합성을 체크한다. 8자리 숫자로 구성된 문자열이어야 하며 1850년 이전의 날짜는 허용하지 않는다.
-
프로토타입
long pfmIsValidDate(char *in_date);
-
파라미터
파라미터명 설명 *in_date (입력)
날짜 문자열(포맷: yyyymmdd)
-
yyyy : 연도 4자리
-
mm : 월 2자리
-
dd : 일 2자리
-
-
반환값
반환값 설명 TRUE
입력 받은 날짜의 정합성에 문제가 없을 경우
FALSE
입력 받은 날짜가 잘못된 값인 경우
-
예제
rc = pfmIsValidDate(“200504080011”); /* rc == FALSE */ rc = pfmIsValidDate (“20050408”); /* rc == TRUE */ rc = pfmIsValidDate (“20010229”); /* rc == FALSE */ if(rc == FALSE) { PFM_ERR(”날짜정합성 오류 %s”, pfmDateGetErrorMsg()); return FALSE; }
2. pfmIsValidTime
입력 받은 시간의 정합성을 체크한다. 6자리 숫자로 구성된 문자열이어야 한다.
-
프로토타입
long pfmIsValidTime(char *in_time);
-
파라미터
파라미터명 설명 *in_time (입력)
시간 문자열(포맷 : hhmmss)
-
hh : 시간 2자리
-
mm : 분 2자리
-
ss : 초 2자리
-
-
반환값
반환값 설명 TRUE
입력 받은 날짜의 정합성에 문제가 없을 경우
FALSE
입력 받은 날짜가 잘못된 값인 경우
-
예제
rc = pfmIsValidTime(“231752”); /* rc == TRUE */ rc = pfmIsValidTime (“23175213”); /* rc == FALSE */ rc = pfmIsValidTime (“271752”); /* rc == FALSE */ rc = pfmIsValidTime (“238727”); /* rc == FALSE */ rc = pfmIsValidTime (“230787”); /* rc == FALSE */ if(rc == FALSE) { PFM_ERR(”시간정합성 오류 %s”, pfmDateGetErrorMsg()); return FALSE; }
3. pfmIsInYyyymmdd
입력 받은 날짜의 포맷을 체크한다. 4자리, 6자리, 8자리 숫자로 구성된 문자열이어야 한다.
4자리 문자열은 연도, 6자리 문자열은 '년도 + 월', 8자리 문자열은 '년도 + 월 + 일’의 형식으로 간주하여 각각에 맞게 포맷을 체크한다.
-
프로토타입
long pfmIsInYyyymmdd(char *yyyymmdd);
-
파라미터
파라미터명 설명 *yyyymmdd (입력)
날짜 문자열(포맷: yyyymmdd)
-
반환값
반환값 설명 TRUE
입력 받은 날짜의 포맷에 문제가 없을 경우
FALSE
입력 받은 날짜가 잘못된 값인 경우
-
예제
rc = pfmIsInYyyymmdd(“200504080011”); /* rc == FALSE */ rc = pfmIsInYyyymmdd (“2005”); /* rc == TRUE */ rc = pfmIsInYyyymmdd (“200504”); /* rc == TRUE */ rc = pfmIsInYyyymmdd (“20050408”); /* rc == TRUE */ rc = pfmIsInYyyymmdd (“20010229”); /* rc == FALSE */ if(rc == FALSE) { PFM_ERR(”날짜정합성 오류 %s”, pfmDateGetErrorMsg()); return FALSE; }
4. pfmDateCmp
입력 받은 두 날짜의 선후를 비교한다.
-
프로토타입
long pfmDateCmp(char *date1, char *date2);
-
파라미터
파라미터명 설명 *date1 (입력)
비교할 날짜 문자열1
*date2 (입력)
비교할 날짜 문자열2
-
반환값
반환값 설명 음수
date1 < date2일 경우
0
date1 == date2일 경우
양수
date1 > date2일 경우
-
예제
rc = pfmDateCmp(“19710413”, “19710414”); /* rc < 0 */ if(pfmDateCmp (begin_date, end_date) > 0) { PFM_ERR(”시작일이 종료일보다 큽니다.”); return RC_ERR; }
5. pfmGetDate
yyyymmdd 형태로 현재 시스템 날짜 정보를 가져온다.
-
프로토타입
long pfmGetDate(char *buff);
-
파라미터
파라미터명 설명 *buff (출력)
현재의 시스템 날짜를 담을 문자열
-
반환값
반환값 설명 RC_NRM
정상적으로 처리된 경우
RC_ERR
입력 값이 NULL이거나 정상적으로 처리되지 않은 경우
-
예제
char date[LEN_DATE + 1] = {0,}; rc = pfmGetDate(date); if(rc == RC_ERR) { PFM_ERR(”현재 날짜 오류 %s”, pfmDateGetErrorMsg()); return RC_ERR; } /* date == “20081020” */
6. pfmGetTime
hhmmss 형태로 현재 시스템의 시간 정보를 가져온다.
-
프로토타입
long pfmGetTime(char *buf);
-
파라미터
파라미터명 설명 *buf (출력)
현재의 시스템 시간을 담을 문자열
-
반환값
반환값 설명 RC_NRM
정상적으로 처리된 경우
RC_ERR
입력 값이 NULL이거나 정상적으로 처리되지 않은 경우
-
예제
char timebuf[LEN_TIME + 1] = {0,}; rc = pfmGetTime(timebuf); if(rc == RC_ERR) { PFM_ERR(”현재 시간 오류 %s”, pfmDateGetErrorMsg()); return RC_ERR; } /* timebuf == “051430” */
7. pfmGetUTime
hhmmssuuuuuu 형태로 현재 시스템의 시간 정보를 가져온다. (uuuuuu : 마이크로초 6자리)
-
프로토타입
long pfmGetUTime(char *buf);
-
파라미터
파라미터명 설명 *buf (출력)
시스템 시간을 담을 문자열
char[12+1]의 공간이 필요
-
반환값
반환값 설명 RC_NRM
정상적으로 처리된 경우
RC_ERR
입력 값이 NULL이거나 정상적으로 처리되지 않은 경우
-
예제
char utime[12 + 1] = {0,}; rc = pfmGetUTime(utime); if(rc == RC_ERR) { PFM_ERR(”오류 %s”, pfmDateGetErrorMsg()); return RC_ERR; } /* utime == “hhmmssuuuuuu” */
8. pfmGetNTime
hhmmssnnnnnnnnn 형태로 현재 시스템의 시간 정보를 가져온다. (nnnnnnnnn : 나노초 9자리)
9자리가 모두 구해지는 경우도 있으나, 마이크로초 + “000” 형태로 구해지는 등 운영체제 별로 값의 정밀도에 차이가 있다.
-
프로토타입
long pfmGetNTime(char *buf);
-
파라미터
파라미터명 설명 *buf (출력)
시스템 시간을 담을 문자열
char[15+1]의 공간이 필요
-
반환값
반환값 설명 RC_NRM
정상적으로 처리된 경우
RC_ERR
입력 값이 NULL이거나 정상적으로 처리되지 않은 경우
-
예제
char ntime[15 + 1] = {0,}; rc = pfmGetNTime(ntime); if(rc == RC_ERR) { PFM_ERR(”오류 %s”, pfmDateGetErrorMsg()); return RC_ERR; } /* utime == “hhmmssnnnnnnnnn” */
9. pfmGetDateTime
yyyymmddhhmmss 형태로 현재 시스템의 날짜와 시간이 이어지는 문자열을 가져온다.
-
프로토타입
long pfmGetDateTime(char *out_buf);
-
파라미터
파라미터명 설명 *out_buf (출력)
시스템 날짜와 시간을 담을 문자열
char[14+1]의 공간이 필요
-
반환값
반환값 설명 RC_NRM
정상적으로 처리된 경우
RC_ERR
입력 값이 NULL이거나 정상적으로 처리되지 않은 경우
-
예제
char dtime[14 + 1]; bzero(dtime, sizeof(dtime)); rc = pfmGetDateTime(dtime); if(rc == RC_ERR) { PFM_ERR(”오류 %s”, pfmDateGetErrorMsg()); return RC_ERR; } /* strlen(dtime) == strlen(“yyyymmddhhmmss”) */
10. pfmGetDateUTime
yyyymmddhhmmssuuuuuu 형태로 현재 시스템의 날짜와 시간이 이어지는 문자열을 가져온다.
-
프로토타입
long pfmGetDateUTime(char *out_buf);
-
파라미터
파라미터명 설명 *out_buf (출력)
시스템 날짜와 시간을 담을 문자열
char[20+1]의 공간이 필요
-
반환값
반환값 설명 RC_NRM
정상적으로 처리된 경우
RC_ERR
입력 값이 NULL이거나 정상적으로 처리되지 않은 경우
-
예제
char dtime[20 + 1]; bzero(dutime, sizeof(dutime)); rc = pfmGetDateUTime(dutime); if(rc == RC_ERR) { PFM_ERR(”오류 %s”, pfmDateGetErrorMsg()); return RC_ERR; } /* strlen(dutime) == strlen(“yyyymmddhhmmssuuuuuu”) */
11. pfmGetDateNTime
yyyymmddhhmmssnnnnnnnnn 형태로 현재 시스템의 날짜와 시간을 한꺼번에 가져온다.
-
프로토타입
long pfmGetDateNTime(char *out_buf);
-
파라미터
파라미터명 설명 *out_buf (출력)
시스템 날짜와 시간을 담을 문자열
(har[23+1]의 공간이 필요하다.)
-
반환값
반환값 설명 RC_NRM
정상적으로 처리된 경우
RC_ERR
입력 값이 NULL이거나 정상적으로 처리되지 않은 경우
-
예제
char dntime[23 + 1]; bzero(dntime, sizeof(dntime)); rc = pfmGetDateNTime(dntime); if(rc == RC_ERR) { PFM_ERR(”오류 %s”, pfmDateGetErrorMsg()); return RC_ERR; } /* strlen(dntime) == strlen(“yyyymmddhhmmssnnnnnnnnn”) */
12. pfmGetLastDayOfFebruary
입력 받은 해의 2월 일수를 반환한다.
-
프로토타입
long pfmGetLastDayOfFebruary(long in_year);
-
파라미터
파라미터명 설명 in_year (입력)
2월 일수를 확인할 해
-
반환값
반환값 설명 29
윤년인 경우
28
윤년이 아닌 경우
RC_ERR
정상적으로 처리되지 않은 경우
-
예제
rc = pfmGetLastDayOfFebruary(1999); /* rc == 28 */ rc = pfmGetLastDayOfFebruary(2000); /* rc == 29 */ rc = pfmGetLastDayOfFebruary(2100); /* rc == 28 */ rc = pfmGetLastDayOfFebruary(2104); /* rc == 29 */ if(rc == RC_ERR) { PFM_ERR(”오류 %s”, pfmDateGetErrorMsg()); return RC_ERR; }
13. pfmIsLeapYear
입력 받은 해가 윤년인지 체크한다.
-
프로토타입
long pfmIsLeapYear(long in_year);
-
파라미터
파라미터명 설명 in_year (입력)
윤년인지 확인할 해
-
반환값
반환값 설명 TRUE
윤년인 경우
FALSE
윤년이 아닌 경우
RC_ERR
정상적으로 처리되지 않은 경우
-
예제
rc = pfmIsLeapYear(1999); /* rc == 0(FALSE) */ rc = pfmIsLeapYear(2000); /* rc == 1(TRUE) */ rc = pfmIsLeapYear(2100); /* rc == 0(FALSE) */ rc = pfmIsLeapYear(2104); /* rc == TRUE */ if(rc == RC_ERR) { PFM_ERR(”오류 %s”, pfmDateGetErrorMsg()); return RC_ERR; }
14. pfmGetWeekDay
입력 받은 날짜를 해당 요일코드(1~7)로 변환하여 *wday에 결과를 채운다.
-
프로토타입
long pfmGetWeekDay(long *wday, char *in_date);
-
파라미터
파라미터명 설명 *wday (출력)
요일을 나타내는 정수 값을 받을 Long형 포인터
(일요일 = 1, 월요일 = 2, … , 토요일 = 7)
*in_date (입력)
날짜 문자열 (포맷 : yyyymmdd)
-
반환값
반환값 설명 RC_NRM
정상적으로 처리된 경우
RC_ERR
정상적으로 처리되지 않은 경우
-
예제
/* illegal date */ rc = pfmGetWeekDay(&onum, “0020050411”); /* rc == RC_ERR */ /* Sunday */ rc = pfmGetWeekDay(&onum, “20050410”); /* rc == RC_NRM */ /* onum == 1 */ /* Monday */ rc = pfmGetWeekDay(&onum, “20050411”); /* rc == RC_NRM */ /* onum == 2 */ /* Tuesday */ rc = pfmGetWeekDay(&onum, “20050412”); /* rc == RC_NRM */ /* onum == 3 */ /* Wednesday */ rc = pfmGetWeekDay(&onum, “20050413”); /* rc == RC_NRM */ /* onum == 4 */ /* Thursday */ rc = pfmGetWeekDay(&onum, “20050414”); /* rc == RC_NRM */ /* onum == 5 */ /* Friday */ rc = pfmGetWeekDay(&onum, “20050415”); /* rc == RC_NRM */ /* onum == 6 */ /* Saturday */ rc = pfmGetWeekDay(&onum, “20050416”); /* rc == RC_NRM */ /* onum == 7 */ if(rc == RC_ERR) { PFM_ERR(”오류 %s”, pfmDateGetErrorMsg()); return RC_ERR; }
15. pfmWeekDayToDate
N번째 주의 특정 요일을 입력하면 해당 날짜를 알려준다.
-
프로토타입
long pfmWeekDayToDate(char *out_date, char *in_yyyymm, long week, long wday, long opt);
-
파라미터
파라미터명 설명 *out_date (출력)
입력 값을 처리해서 나온 날짜 포인터
*in_yyyymm (입력)
입력 받은 날짜
week (입력)
입력 받은 주
wday (입력)
요일을 다음의 값으로 입력
-
PFM_WEEK_DAY_SUN → 1
-
PFM_WEEK_DAY_MON → 2
-
PFM_WEEK_DAY_TUE → 3
-
PFM_WEEK_DAY_WED → 4
-
PFM_WEEK_DAY_THU → 5
-
PFM_WEEK_DAY_FRI → 6
-
PFM_WEEK_DAY_SAT → 7
opt (입력)
일주일의 단위 지정
-
PFM_CONV_WDATTODATE_BY_CA : 일요일~토요일이 한주
-
PFM_CONV_WDATTODATE_BY_WC : 1일~ 7일이 한주
-
-
반환값
반환값 설명 RC_NRM
정상적으로 처리된 경우
RC_ERR
정상적으로 처리되지 않은 경우
연월 정보에 잘못된 포맷이 입력되거나 주 정보를 음수나 6을 초과하는 값을 입력하였을 경우 에러가 발생한다. 연월, 주 및 요일을 정상적으로 입력하였으나 에러가 발생한 경우는 요일 값에 해당하는 일자가 음수나 말일을 초과한 값으로 처리된 경우이다. 예를 들어 2006년 4월 첫 번째 주 화요일을 입력한 경우 2006년 4월 첫 번째 주는 토요일부터 시작하므로 첫 번째 주 화요일은 2006년 4월에 존재하지 않아 에러를 발생시킨다.
-
예제
long rc; char out_date[LEN_DATE + 1]; rc = pfmWeekDayToDate (out_date, “200506”, 3, PFM_WEEK_DAY_FRI, PFM_CONV_WDATTODATE_BY_CA); if(rc != RC_NRM) { PFM_ERR(”Fail pfmWeekDayToDate %s”, pfmDateGetErrorMsg()); Return RC_ERR; } /* out_date = “20050617” */
16. pfmDateFormat
날짜를 원하는 형태의 문자열로 변환한다.
-
프로토타입
long pfmDateFormat(char *dest, char *frmt, char *date);
-
파라미터
파라미터명 설명 *dest (출력)
변경될 문자열이 저장될 공간 (frmt 문자열과 같은 크기의 공간 필요)
*frmt (입력)
변경될 문자열의 포맷으로 다음과 같이 입력 (길이는 1024Byte 이하로 제한)
-
yyyy or YYYY : 연도 4자리
-
yy or YY : 연도 2자리
-
mm or MM : 월 2자리
-
dd or DD : 일 2자리
-
mon or MON : 요일 3자리
*date (입력)
yyyymmdd 형태의 날짜를 나타내는 문자열
-
-
반환값
반환값 설명 RC_NRM
정상적으로 처리된 경우
RC_ERR
정상적으로 처리되지 않은 경우
-
예제
/* date = 20051231 */ rc = pfmDateFormat(dest, “yyyy/mm/dd”, date); if(rc != RC_NRM) { PFM_ERR(”%s”, pfmDateGetErrorMsg()); Return RC_ERR; } /* format : yyyymmdd -> dest : 20051231 */ /* format : yy-mm-dd -> dest : 05-12-31 */ /* format : mm/dd/yyyy -> dest : 12/31/2005 */ /* format : mm.dd -> dest : 12.31 */ /* format : mon.dd -> dest : dec.31 */ /* format : MON.dd.yy -> dest : DEC.31.05 */
17. pfmDateJulianToGregorian
날짜를 율리우스식에서 그레고리언식으로 변환한다.
-
프로토타입
long pfmDateJulianToGregorian(char *jul_date, char *grg_date, long base_year);
-
파라미터
파라미터명 설명 *jul_date (출력)
율리우스식 날짜
*grg_date (입력)
그레고리언식 날짜
base_year (입력)
기준 연도
-
반환값
반환값 설명 RC_NRM
정상적으로 처리된 경우
RC_ERR
정상적으로 처리되지 않은 경우
-
예제
char in_date[] = “123”; char grg_date[LEN_DATE + 1]; /* 2001년을 기준으로 한 julian date를 Gregorian date로 변환 */ rc = pfmDateJulianToGregorian(grg_date, in_date, 2001); if(rc == RC_ERR) { PFM_ERR("오류 %s", pfmDateGetErrorMsg()); return RC_ERR; }
18. pfmDateGregorianToJulian
날짜를 그레고리언식에서 율리우스식으로 변환한다.
-
프로토타입
long pfmDateGregorianToJulian(char *grg_date, char *jul_date, long base_year);
-
파라미터
파라미터명 설명 *grg_date (출력)
그레고리언식 날짜
*jul_date (입력)
율리우스식 날짜
base_year (입력)
기준 연도
-
반환값
반환값 설명 RC_NRM
정상적으로 처리된 경우
RC_ERR
정상적으로 처리되지 않은 경우
-
예제
char in_date[LEN_DATE + 1] = “20040504”; char jul_date[20 + 1]; /* Gregorian date를 2001년을 기준으로 한 julian date로 변환 */ rc = pfmDateGregorianToJulian(jul_date, in_date, 2001); if(rc == RC_ERR) { PFM_ERR("오류 %s", pfmDateGetErrorMsg()); return RC_ERR; }
19. pfmDateSolarToLunar
입력 받은 양력 날짜를 음력 날짜로 변환한다.
-
프로토타입
long pfmDateSolarToLunar(char * out_date, char *in_date);
-
파라미터
파라미터명 설명 *out_date (출력)
변환된 음력 날짜
*in_date (입력)
입력 받은 양력 날짜
-
반환값
반환값 설명 RC_NRM
정상적으로 처리된 경우
RC_ERR
정상적으로 처리되지 않은 경우
-
예제
long rc; char lunar_date[LEN_DATE + 1]; rc = pfmDateSolarToLunar(lunar_date, “19750413”); if(rc != RC_NRM) { PFM_ERR("Fail pfmDateSolarToLunar %s", pfmDateGetErrorMsg()); return RC_ERR; } /* lunar_date = “019750402” 첫 번째 바이트는 윤달 여부 0이면 평달, 1 이면 윤달을 표시 */
20. pfmDateLunarToSolar
입력 받은 음력 날짜를 양력 날짜로 변환한다.
-
프로토타입
long pfmDateLunarToSolar(char *out_date, char *in_date);
-
파라미터
파라미터명 설명 *out_date (출력)
변환된 양력 날짜
*in_date (입력)
입력 받은 음력 날짜
-
반환값
반환값 설명 RC_NRM
정상적으로 처리된 경우
RC_ERR
정상적으로 처리되지 않은 경우
-
예제
long rc; char solar_date[LEN_DATE + 1]; rc = pfmDateLunarToSolar(solar_date, “019750302”); /* 입력값의 첫 번째 비트는 윤달여부 표시 0이면 평달, 1이면 윤달 */ if(rc != RC_NRM) { PFM_ERR("Fail pfmDateLunarToSolar %s", pfmDateGetErrorMsg()); return RC_ERR; } /* solar_date = “19750413” */
21. pfmCountDays
시작일과 종료일 사이의 일수, 월수를 계산한다.
-
프로토타입
long pfmCountDays(PfmCountDaysIO *pfmCountDays_io);
-
파라미터
파라미터명 설명 *pfmCountDays_io (입출력)
계산된 결과 값의 포인터
-
반환값
반환값 설명 RC_NRM
정상적으로 처리된 경우
RC_ERR
정상적으로 처리되지 않은 경우
-
예제
#define PFM_CNT_DAYS_CALC_ONE 1 /* 계산 방법: 한편 넣기 */ #define PFM_CNT_DAYS_CALC_BOTH 2 /* 계산 방법: 양편 넣기 */ #define PFM_CNT_DAYS_OUT_DD 1 /* 출력 방법: 일 */ #define PFM_CNT_DAYS_OUT_MMDD 2 /* 출력 방법: 월, 일 */ typedef struct PfmDateCountDateIn PfmDateCountDateIn; struct PfmDateCountDateIn { long calc_type; /* 계산 방법 */ long out_type; /* 출력 방법 */ char beg_date[LEN_DATE + 1]; /* 시작일 */ char end_date[LEN_DATE + 1]; /* 종료일 */ }; typedef struct PfmDateCountDateOut PfmDateCountDateOut; struct PfmDateCountDateOut { long mm_cnt; /* 월수 */ long dd_cnt; /* 일수 */ }; typedef struct PfmDateCountDateIO PfmDateCountDateIO; struct PfmDateCountDateIO { PfmDateCountDateIn in; PfmDateCountDateOut out; }; PfmDateCountDateIO pfmCountDays_io; strncpy(pfmCountDays_io.in.beg_date, “20040228”, LEN_DATE); strncpy(pfmCountDays_io.in.end_date, “20040530”, LEN_DATE); pfmCountDays_io.in.out_type = PFM_CNT_DAY_OUT_MMDD; /* 월, 일 */ /* 한편넣기:시작 일자 제외계산 */ pfmCountDays_io.in.calc_type = PFM_CNT_DAYS_CALC_ONE; rc = pfmCountDays(&pfmCountDays_io); /* pfmCountDays_io.out.mm_cnt == 3 */ /* pfmCountDays_io.out.dd_cnt == 2 */ /* 양편넣기: 시작일자 포함계산 */ pfmCountDays.in.calc_type= PFM_CNT_DAYS_CALC_BOTH; rc = pfmCountDays(&pfmCountDays _io); /* pfmCountDays_io.out.mm_cnt == 3 */ /* pfmCountDays_io.out.dd_cnt == 3 */ pfmCountDays_io.in.out_type = MPFMCNTDAY_OUT_DD; /* 일 */ /* 한편넣기:시작 일자 제외계산 */ pfmCountDays_io.in.calc_type = PFMCNTDAY_NO; rc = pfmCountDays(&pfmCountDays_io); /* pfmCountDays_io.out.dd_cnt == 93 */ /* 양편넣기: 시작일자 포함계산 */ pfmCountDays.in.calc_type = PFMCNTDAY_YES; rc = pfmCountDays(&pfmCountDays_io); /* pfmCountDays_io.out.dd_cnt == 94 */ if(rc == RC_ERR) { PFM_ERR("오류 %s", pfmDateGetErrorMsg()); return RC_ERR; }
22. pfmCalcDate
시작일을 입력한 경우 종료일을 입력한 경우 시작일을 계산한다.
-
프로토타입
long pfmCalcDate(PfmCalculateDateIO *pfmCalculateDate_io);
-
파라미터
파라미터명 설명 *pfmCalculateDate_io (입출력)
계산된 결과 값의 포인터
-
반환값
반환값 설명 RC_NRM
정상적으로 처리된 경우
RC_ERR
정상적으로 처리되지 않은 경우
(시작일, 종료일이 동시에 입력되거나 동시에 입력되지 않는 경우 에러가 발생한다. 시작일과 종료일의 포맷이 yyyymmdd이 아닌 경우에도 에러가 발생한다.)
-
예제
#define PFM_CALC_DATE_CALC_ONE 1 /* 계산 방법: 한편 넣기 */ #define PFM_CALC_DATE_CALC_BOTH 2 /* 계산 방법: 양편 넣기 */ #define PFM_CALC_DATE_START_DATE 1 /* 분기시작일 */ typedef struct PfmDateCalculateDateIn PfmDateCalculateDateIn; struct PfmDateCalculateDateIn { long calc_type; /* 계산 방법 */ char beg_date[LEN_DATE + 1]; /* 시작일 */ char end_date[LEN_DATE + 1]; /* 종료일 */ long mm_cnt; /* 월수 */ long dd_cnt; /* 일수 */ }; typedef struct PfmDateCalculateDateOut PfmDateCalculateDateOut; struct PfmDateCalculateDateOut { char beg_date[LEN_DATE + 1]; /* 시작일 */ char end_date[LEN_DATE + 1]; /* 종료일 */ }; typedef struct PfmDateCalculateDateIO PfmDateCalculateDateIO; struct PfmDateCalculateDateIO { PfmDateCalculateDateIn in; PfmDateCalculateDateOut out; }; strcpy( pfmCalcDate_io.in.beg_date, "20040228" ); pfmCalcDate_io.in.mm_cnt = 3; pfmCalcDate_io.in.dd_cnt = 2; pfmCalcDate_io.in.calc_type = PFM_CALC_DATE_CALC_ONE; rc = pfmCalcDate( &pfmCalcDate_io ); /* pfmCalcDate_io.out.end_date = 20040530 */ pfmCalcDate_io.in.calc_type = PFM_CALC_DATE_CALC_BOTH; rc = pfmCalcDate( &pfmCalcDate_io ); /* pfmCalcDate_io.out.end_date = 20040529 */
23. pfmDateCalcQuarterStartDateEndDate
입력된 날짜가 몇 분기에 해당하는지와 해당 분기의 시작 날짜와 종료 날짜를 반환한다.
-
프로토타입
long pfmDateCalcQuarterStartDateEndDate(char *i_date, long *o_qyear, char *o_st_date, char *o_end_date); -
파라미터
파라미터명 설명 *i_date (입력)
입력된 날짜
*o_qyear (출력)
입력 날짜의 해당 분기를 숫자로 반환
*o_st_date (출력)
입력 날짜의 해당 분기 시작일
* o_end_date(출력)
입력 날짜의 해당 분기 종료일
-
반환값
반환값 설명 RC_NRM
정상적으로 처리된 경우
RC_ERR
정상적으로 처리되지 않은 경우
-
예제
char i_date[] = “200500821”; char o_st_date[LEN_DATE + 1]; char o_end_date[LEN_DATE + 1]; long rc, o_qyear; /* 입력일자를 기준으로 한 해당 분기, 분기시작일, 분기종료일을 계산 */ rc = pfmDateCalcQuarterStartDateEndDate(i_date, &o_qyear, o_st_date, o_end_date); /* o_qyear = 3 */ /* o_st_date = “20050701” */ /* o_end_date = “20050930” */ if(rc == RC_ERR) { PFM_ERR("오류 %s", pfmDateGetErrorMsg()); return RC_ERR; }