반응형


#include <time.h> - 날짜와 시간에 대한 함수  ㄴ 레퍼런스 / ㅁ 내지식창고

2010/01/18 15:02

복사http://blog.naver.com/rasede/150078770618


struct tm {
        int tm_sec;     /* seconds after the minute - [0,59] */
        int tm_min;     /* minutes after the hour - [0,59] */
        int tm_hour;    /* hours since midnight - [0,23] */
        int tm_mday;    /* day of the month - [1,31] */
        int tm_mon;     /* months since January - [0,11] */ // 0부터 이므로 +1을 해줘야된다.
        int tm_year;    /* years since 1900 */ - 1900년이 기준이기때문에 2010이면 110이 저장됨.
        int tm_wday;    /* days since Sunday - [0,6] */
        int tm_yday;    /* days since January 1 - [0,365] */
        int tm_isdst;   /* daylight savings time flag */
        };

 

typedef long time_t

typedef long clock_t;

- 헤더 함수 내부에 time_t와 clock_t를 사용자 자료형으로 long으로 정의하고 있다.

 

time ( time_t time(time_t * tp) )

- 현재 시간을 가로안의 tp로 넣는다. 예를 들어 current라는 int형 변수를 선언했다면 time(&current)라고 쓴다. 그럼 cuurrent에 현재 시간이 저장된다. 시간이 잘못되어 있으면 -1을 리턴.

 

localtime ( struct tm * localtime (const time_t * tp) )

- tp로 들어온 시간을 지역시간으로 바꿔서 리턴. tm형 구조체 하나 선언해서 넣어주고 쓴다. 근데 아직 gmtime이랑 별차이를 못느끼겠음;;

 

gmtime ( struct tm * gmtime(const time_t *tp) )

- tp로 들어온 시간을 협정시계시인지 뭔지로 변환하는듯. 역시 local하고 차이를 잘 모르겠다;;

 

clock ( clock_t clock(void) )

-프로그램 실행 시작으로부터의 시간... 이라는데 이거 어떻게 쓰는거야 -_-;; 알아봐야겠다;

 

asctime ( char * asctime(const struct tm *tp) )

- 가로로 들어온 시간 구조체를 문자열로 바꿔서 반환. asctime(localtime(&current)) 이런것도 가능했다. 신기하더라. 결과는 Mon Jan 18 14:15::05 2010 이런식으로 나왔다.

 

ctime ( char * ctime (const time_t * tp) )

- 결과는 Mon Jan 18 14:15::05 2010 이런식으로 나왔다. 지역시간으로 바꿔서 문자로 하는것 같은데 위에랑 차이를 잘 모르겠다. -_-;; 위에랑 아래의 차이는 그냥 가로안에 자료형 차이?

 

difftime ( double difftime(time_t time2 , time_t time1) )

- 사용법이야 뭐 time(&1) time(&2) 해가지고 보내는건 알겠는데 언제 쓰는걸까 -_-;;; 아직 잘 모르겠다. 아. 프로그램 시작할때 1을 받고 2를 해서 프로그램이 얼마나 걸리는지 계산하려나?

 

mktime ( time_t mktime(struct tm *tp) )

- 지역시간을 표준시간으로 바꿔준다는데 바꿔도 별 차이 없던데;;

 time(&current);
 ggg=mktime(localtime(&current));

 printf("%lf", difftime(current, ggg)); ==> 결과가 그냥 0.000000 나왔다.

 

strftime

( size_t strftime(char * s, size_t smax, const char * fmt, const struct tm * tp) )

- 정해진 숫자보다 많은 수가 만들어지면 0을 리턴하고 가로 안에것을 해석하면

( 저장할 배열, 저장가능한 최대수, "저장되는 문자열", 들어오는 시간정보 )

 

char ch[128];

struct tm * local;

time(&current);
local = localtime( &current );

strftime( ch, 128, "Today is %A, day %d of %B in the year %Y.\n", local );

puts(ch);

 

그러면 출력이

              Monday        18       January                  2010

Today is    %A,    day  %i of    %B      in the year  %Y.
이런식으로 된다.

 

%a = 요일 이름의 약자 위의 예를 들어서 하자면 monday가 mon이 되어서 출력되더라.

%A = 요일 이름.

%b = 달의 이름 약자.

%b = 달의 이름

%c = 지역표기 시간 ( 01/18/10 14:57:02 이런식으로 출력됨)

%d = 날짜

%H = 시간 00~23시 까지 표시됨

%I = 시간 1~12시 까지 표시되는데 오전 오후는 표시 안되더라?

%m = 달

%M = 분

%q = 오전 오후 표시해준다.

%S = 분

%U = 일년의 몇번째 주냐

%w = 요일표시 일요일이 0으로 6까지 표시됨

%W = 일년중 몇번째 주인가 U나 W나 그게그거

%x = 지역 날짜. %c 모습에서 날짜만 보여진다고 보면됨.

%X = 지역 시간 마찬가지.

%y = 년도 현재 2010년인데 표시는 10으로 됨 00~99까지 되는듯?

%Y = 년도 2010으로 출력

%Z = 시간 지역 이름

%% = %

반응형

+ Recent posts