linuxの下で時間に関連するいくつかの関数の総括
6366 ワード
1asctime
関数の概要
時間と日付を文字列で表す
そうかんかんすう
time,ctime,gmtime,localtime ヘッダファイル #include 関数プロトタイプ char * asctime(const struct tm * timeptr); 関数説明 asctime()は、パラメータtimeptrが指すtm構造の情報を実世界で使用される時間日付表現方法に変換し、結果を文字列形式で返す.この関数はタイムゾーンからローカル時間に変換され、文字列形式は「Wed Jun 30 21:49:08 1993」です.戻り値 現在の現地の時刻を表す文字列を返します.追加説明 関連する日付関数を呼び出すと、この文字列が破壊される可能性があります.この関数がctimeと異なるのは、入力されたパラメータが異なる構造であることです.例
実行結果:
Sat Oct 28 02:10:06 2000
2ctime関数概要 時間と日付を文字列で表す相関関数 time,asctime,gmtime,localtime ヘッダファイル #include 関数プロトタイプ char *ctime(const time_t *timep); 関数説明 ctime()パラメータtimepが指すtime_t構造における情報は,実世界で使用される時間日付表現方法に変換され,結果を文字列形態で返す.この関数はタイムゾーンからローカル時間に変換され、文字列フォーマットは「Wed Jun 30 21:49:08 1993」です.関連する日付関数を呼び出すと、この文字列が破壊される可能性があります.戻り値 現在の現地の日付を表す文字列を返します.例
実行結果:
Sat Oct 28 10 : 12 : 05 2000
3gmtime関数概要 現在の時刻と日付を取得相関関数 time,asctime,ctime,localtime ヘッダファイル #include 関数プロトタイプ struct tm*gmtime(const time_t*timep); 関数説明 gmtime()パラメータtimepが指すtime_t構造における情報は、実世界で使用される時間日付表現方法に変換され、結果は構造tmによって返される.構造tmの定義はstruct tm{int tm_sec;int tm_min;int tm_hour;int tm_mday;int tm_mon;int tm_year;int tm_wday;int tm_yday;int tm_isdst;};int tm_secは現在の秒数を表し、正常範囲は0-59であるが、61秒int tm_まで許容される.minは現在のスコアを表し、範囲0-59 int tm_hour真夜中からの時間数は、0-23 int tm_mday現在の月の日数、範囲01-31 int tm_monは現在の月を表し、1月から計算すると、範囲は0-11 int tm_year 1900年から現在までの年数int tm_wday 1週間の日数は、月曜日から0-6 int_ydayは今年1月1日から現在までの日数を0-365 int_isdst日光節約時間フラグこの関数が返す時間日付は、タイムゾーン変換ではなくUTC時間です.戻り値 戻り構造tmは、現在のUTC時間を表す例
実行結果:
2000/10/28 Sat 8:15:38
4gettimeofday関数概要 現在の時間をとる相関関数 time,ctime,ftime,settimeofday ヘッダファイル #include #include 関数プロトタイプ int gettimeofday ( struct timeval * tv , struct timezone * tz ) 関数説明 gettimeofday()は現在の時間をtvが指す構造で返し,現地タイムゾーンの情報はtzが指す構造に格納する.
timeval構造は、struct timeval{long tv_sec;/*秒*/long tv_usec;/*マイクロ秒*/}と定義される.timezone構造は、struct timezone{int tz_minuteswest;/*とGreenwichの時間差が何分あるか*/int tz_dsttime;/*日光が時間を節約する状態*/}と定義される.上記の2つの構造は、/usr/include/sys/timeに定義.h.
tz_dsttimeが表す状態は以下のDST_NONE/*使用しない*/DST_USA/*アメリカ*/DST_AUST/*オーストラリア*/DST_WET/*西欧*/DST_MET/*中欧*/DST_EET/*東欧*/DST_CAN/*カナダ*/DST_GB/*ブリテン*/DST_RUM/*ルーマニア*/DST_TUR/*トルコ*/DST_AUSTALT/*オーストラリア(1986年以降)*/戻り値 成功すると0が返され、失敗すると-1が返され、エラーコードはerrnoに保存されます.さらに、EFAULTポインタtvおよびtzが指すメモリ領域がアクセス権限を超えていることを示す.
例
実行結果:
tv_sec: 974857339 tv_usec:136996 tz_minuteswest:-540 tz_dsttime:0
5 localtime関数概要 現地の現在時刻と日付を取得相関関数 time, asctime, ctime, gmtime ヘッダファイル #include 関数プロトタイプ struct tm *localtime(const time_t * timep); 関数説明 localtime()パラメータtimepが指すtime_t構造における情報は、実世界で使用される時間日付表現方法に変換され、結果は構造tmによって返される.構造tmの定義はgmtime()を参照してください.この関数が返す日付は、ローカルタイムゾーンに変換されました.
戻り値
戻り構造tmは、現在の現地時間を表す.例
実行結果:
2000/10/28 Sat 11:12:22
6 mktime関数概要 時間構造データを経過する秒数に変換する.相関関数 time,asctime,gmtime,localtime ヘッダファイル #include 定義関数 time_t mktime(strcut tm * timeptr); 関数プロトタイプ mktime()は、パラメータtimeptrが指すtm構造データを、西暦1970年1月1日0時0分0秒から現在までのUTC時間を計算した秒数に変換するために使用される.戻り値 経過した秒数を返します.例 /*time()で時間(秒数)を取得し、localtime()でstruct tmに変換mktine()を再利用してstruct tmを元の秒数に変換*/
実行結果:
time():974943297 time()->localtime()->mktime():974943297
7settimeofday関数概要 現在時刻の設定相関関数 time,ctime,ftime,gettimeofday ヘッダファイル #include #include 関数プロトタイプ int settimeofday ( const struct timeval *tv,const struct timezone *tz); 関数説明 settimeofday()は現在の時間をtvが指す構造情報に設定し,現地タイムゾーン情報はtzが指す構造に設定する.詳細はgettimeofday()を参照してください.この関数を使用して時間を変更できるのはroot権限のみです.戻り値 成功すると0が返され、失敗すると-1が返され、エラーコードはerrnoに保存されます.
エラーコード
EPERMはroot権限からsettimeofday()を呼び出すのではなく、権限が足りません.EINVALタイムゾーンまたはデータが正しくないため、時間を正しく設定できません.
8time関数概要 現在の時刻を取得相関関数 ctime,ftime,gettimeofday ヘッダファイル #include 関数プロトタイプ time_t time(time_t *t); 関数説明 この関数は、西暦1970年1月1日のUTC時間が0時0分0秒から現在までの秒数を返します.tが空のポインタでない場合、この関数は戻り値をtポインタが指すメモリに格納します.戻り値 成功すると秒数が返され、失敗すると(time_t)-1)値が返され、エラーの原因がerrnoに保存されます.例
関数の概要
そうかんかんすう
#include <time.h>
main()
{
time_t timep;
time (&timep);
printf(“%s”,asctime(gmtime(&timep)));
}
実行結果:
Sat Oct 28 02:10:06 2000
2ctime
#include<time.h>
main()
{
time_t timep;
time (&timep);
printf(“%s”,ctime(&timep));
}
実行結果:
Sat Oct 28 10 : 12 : 05 2000
3gmtime
#include <time.h>
main()
{
char *wday[]={"Sun","Mon","Tue","Wed","Thu","Fri","Sat"};
time_t timep;
struct tm *p;
time(&timep);
p=gmtime(&timep);
printf(“%d%d%d”,(1900+p->tm_year), (1+p->tm_mon),p->tm_mday);
printf(“%s%d;%d;%d
”, wday[p->tm_wday], p->tm_hour, p->tm_min, p->tm_sec);
}
実行結果:
2000/10/28 Sat 8:15:38
4gettimeofday
timeval構造は、struct timeval{long tv_sec;/*秒*/long tv_usec;/*マイクロ秒*/}と定義される.timezone構造は、struct timezone{int tz_minuteswest;/*とGreenwichの時間差が何分あるか*/int tz_dsttime;/*日光が時間を節約する状態*/}と定義される.上記の2つの構造は、/usr/include/sys/timeに定義.h.
tz_dsttimeが表す状態は以下のDST_NONE/*使用しない*/DST_USA/*アメリカ*/DST_AUST/*オーストラリア*/DST_WET/*西欧*/DST_MET/*中欧*/DST_EET/*東欧*/DST_CAN/*カナダ*/DST_GB/*ブリテン*/DST_RUM/*ルーマニア*/DST_TUR/*トルコ*/DST_AUSTALT/*オーストラリア(1986年以降)*/
例
#include<sys/time.h>
#include<unistd.h>
main(){
struct timeval tv;
struct timezone tz;
gettimeofday (&tv , &tz);
printf(“tv_sec; %d
”, tv.tv_sec) ;
printf(“tv_usec; %d
”,tv.tv_usec);
printf(“tz_minuteswest; %d
”, tz.tz_minuteswest);
printf(“tz_dsttime, %d
”,tz.tz_dsttime);
}
実行結果:
tv_sec: 974857339 tv_usec:136996 tz_minuteswest:-540 tz_dsttime:0
5 localtime
戻り値
#include<time.h>
main()
{
char *wday[]={“Sun”,”Mon”,”Tue”,”Wed”,”Thu”,”Fri”,”Sat”};
time_t timep;
struct tm *p;
time(&timep);
p=localtime(&timep); /* */
printf (“%d%d%d ”, (1900+p->tm_year),( l+p->tm_mon), p->tm_mday);
printf(“%s%d:%d:%d
”, wday[p->tm_wday],p->tm_hour, p->tm_min, p->tm_sec);
}
実行結果:
2000/10/28 Sat 11:12:22
6 mktime
#include<time.h>
main()
{
time_t timep;
strcut tm *p;
time(&timep);
printf(“time() : %d
”,timep);
p=localtime(&timep);
timep = mktime(p);
printf(“time()->localtime()->mktime():%d
”,timep);
}
実行結果:
time():974943297 time()->localtime()->mktime():974943297
7settimeofday
エラーコード
EPERMはroot権限からsettimeofday()を呼び出すのではなく、権限が足りません.EINVALタイムゾーンまたはデータが正しくないため、時間を正しく設定できません.
8time
#include<time.h>
mian()
{
int seconds= time((time_t*)NULL);
printf(“%d
”,seconds);
}