반응형

gettimeofday(2) : 현재 시간을 가져오기

--------------------------------------------------------------------------------
1.사용법

#include <sys/time.h>
#include <unistd.h>

int gettimeofday(struct timeval *tv, struct timezone *tz);


--------------------------------------------------------------------------------

2. 설명

gettimeofday()은 time(2)와 매우 비슷하지만 마이크로초 단위의 시간 까지 되돌려준다.
현재는 time(2)를 대신해서 쓰이고 있으며, 가능한 time(2)대신 이 함수를 사용하는 걸 권장한다.

첫번째 인자인 tv는 현재 시스템 시간을 저장하기 위한 구조체로 다음과 같이 정의되어 있다.

struct timeval
{
    long tv_sec;       // 초
    long tv_usec;      // 마이크로초
}
 
 
두번째 인자인 tz은 타임존을 설정하기 위해서 사용된다.

struct timezone
{
    int tz_minuteswest:  // 그리니치 서측분차 
    int tz_dsttime       // DST 보정타입(일광 절약시간)
}
 
 
현재 timezone 구조체는 사용되지 않고 있으며, 앞으로도 지원되지 않을 것이다.
간혹 커널 소스등에서 이 필드가 사용되는 경우가 있는데, 모든 경우에 버그로 판단되어서 무시한다.
복잡하게 생각할 필요 없이 tz은 NULL을 사용하도록 한다.

--------------------------------------------------------------------------------

3. 반환값

성공하면 0 실패하면 -1을 리턴한다.


--------------------------------------------------------------------------------
4. 예제

#include <sys/time.h>
#include <unistd.h>
#include <stdio.h>
#include <string.h>

int main()
{

    struct timeval now;
    struct tm      *pLocalTime;
    char   sDateTime[128];

    /* 현재 시간을 얻어온다. */
    gettimeofday(&now, NULL);
    pLocalTime = (struct tm*)localtime((time_t*)&now.tv_sec);
  
    /*데이트의 형식 변환 */
    memset(sDateTime, 0x00, sizeof(sDateTime));

    /* strftime(sDateTime,128,"%Y %B %d %A %I:%M:%S %p",pLocalTime); */

    sprintf(sDateTime, "%04d-%02d-%02d %02d:%02d:%02d.%03d", pLocalTime->tm_year+1900, pLocalTime->tm_mon+1, pLocalTime->tm_mday, pL
ocalTime->tm_hour, pLocalTime->tm_min, pLocalTime->tm_sec, now.tv_usec/1000);
  
    printf("CurrentDateTime:%s\n", sDateTime);

    return 0;
}


 

반응형
Posted by 공간사랑
,