Linuxタイムスタンプ、タイムタイプ変換


/**********************************************************************************************************************************
  【    】(1)time_t:    int  
              (2)struct tm:     ,         int  ,tm_year、tm_mon、tm_mday、tm_hour、tm_min、tm_sec
  【    】(1)time():          ,        time_t  ,     1970 1 1 00:00:00        。
              (2)localtime():   1970-1-1                          ,  time_t   struct tm(    、    )
              (3)mktime():   (struct tm)    1970 1 1          (time_t),       ,       -1。
              (4)strptime():               struct tm    (    、    )。
              (5)strftime():             /  ,             ;struct tm            。
*************************************************************************************************************************************/

#include 
#include 


int main()
{
	time_t timep;
	struct tm *p;
	time(&timep);
	printf("time():%d
", (int)timep); p = localtime(&timep); printf("%4d-%2d-%2d %2d-%2d-%2d
", p->tm_year + 1990, p->tm_mon + 1, p->tm_mday, p->tm_hour, p->tm_min, p->tm_sec); struct tm tm_time; strptime("2013-11-15 15:45:23", "%Y-%m-%d %H:%M:%S", &tm_time); printf("%ld
", mktime(&tm_time)); printf("%4d-%2d-%2d %2d-%2d-%2d
", tm_time.tm_year + 1990, tm_time.tm_mon + 1, tm_time.tm_mday, tm_time.tm_hour, tm_time.tm_min, tm_time.tm_sec); tm_time.tm_sec += 2;// printf("%4d-%2d-%2d %2d-%2d-%2d
", tm_time.tm_year + 1990, tm_time.tm_mon + 1, tm_time.tm_mday, tm_time.tm_hour, tm_time.tm_min, tm_time.tm_sec); }

(1)概要
linuxでのストレージ時間には、一般的に2つのストレージ方法があります.
(1)time_を1つ使うt(intのような)変数は、1970年から現在まで何秒が経過したかを記録する.(2)1つのstruct tm構造体変数で表し,年月日分秒をそれぞれ格納する.
time_t:1970年から現在まで何秒経過したかを格納するために使用されます.より正確にするには、構造struct timevalを使用します.それは微妙に正確です.
struct timeval
{
     long tv_sec; /* */
     long tv_usec; /*  */
};

struct tm:直接保存年月日分秒、年は1900年から今まで何年ですか.直接保存するのではなく、2008年、月は0から始まり、0は1月、週も0から始まり、0は日曜日、1は月曜日を表します.正確な年月を得るには
tm_year+1990、tm_mon+1でいいです.
struct tm
{
    int tm_sec; /* ,    0-59,     61*/
    int tm_min; /*  ,0-59*/
    int tm_hour; /*  , 0-23*/
    int tm_mday; /* ,         ,1-31*/
    int tm_mon; /* ,      ,0-11*/
    int tm_year; /* ,  1900       */
    int tm_wday; /*  ,       ,       ,0-6*/
    int tm_yday; /*   1 1       ,  0-365*/
    int tm_isdst; /*         */
};

(2)関数の詳細1、システム時間を得る
 time_t time(time_t *timer) ;
現在のシステム時間を取得し、time_を返します.tタイプは、1970年1月1日00:00:00から現在時刻までの秒数を表す大きな整数です.
2、time_tタイプとstruct tmタイプ間の変換
struct tm *localtime(const time_t *timer);
time_t mktime(struct tm * timeptr);
   
localtime():time_tはstruct tmタイプ(ローカル時間、カレンダー時間)に変換され、システム時間を得るわけではない.
mktime():struct tmタイプ時間(カレンダー時間、ローカル時間)を1970年1月1日以降に失われた時間の秒数(time_t)に変換し、経過した秒数を返し、エラーが発生した場合-1を返します.
3、文字列形式に変換する時間形式
char *ctime(const time_t *timep);
char *asctime(const struct tm* timeptr);
の両方は最終的に「文字列形式」の時間を得るが、それらの入力パラメータは異なる.ctime()time_tタイプが真の世界に変換された時間を文字列で表示する.struct tm構造の情報を実世界に変換する時間を文字列として表示します.文字列の形式は次のとおりです.
Wed Feb 13 15:46:11 2013
4、計算時間差
double difftime(time_t starttime, time_t endtime);
は2つのtime_を返します.t型変数間の時間間隔,すなわち,2つの時刻間の時間差を計算する.また,上記のプログラムではstruct tm構造体における要素値の大きさを加減することによって時間加減演算を行うことも見られる.同様にtime_についてtタイプもこのように操作できますが、分かりにくいだけで、秒単位で得られます.
5、時間フォーマット出力
char *strptime(const char *buf,const char *format, struct tm *tm);
size_t strftime(char *strDest,size_t maxsize,const char *format,const struct tm *timeptr);
     
strptime():
bufの時間文字列の内容をformatのフォーマットに従ってstruct tmの形式に変換し、最終的にtmに格納する.
strftime():format指向文字列のフォーマットコマンドに従ってtimeptrに保存された時間情報をstrDest指向文字列に格納し、最大maxsize文字をstrDestに格納します.この関数は、strDestが指す文字列に配置された文字数を返します.