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;
    }

24. pfmDateGetErrorMsg

Date 유틸리티 사용 중 에러가 발생하였을 때 해당 에러 메시지를 반환한다.

  • 프로토타입

    long pfmDateGetErrorMsg(void);
  • 반환값

    해당 에러 메시지를 반환한다.

  • 예제

    rc = pfmDateGetWeekDay(&a, b);
    if(rc != RC_NRM) {
      PFM_ERR(”오류 %s”, pfmDateGetErrorMsg());
    /* 또는 PFM_ERR(“%s”, pfmUtilGetErrorMsg()); */
      Return RC_ERR;
    }