gettimeofday

Section: System Calls (2)
Updated: 2026-02-08
Index JM Home Page
 

名前

gettimeofday, settimeofday - 時刻を取得/設定する  

ライブラリ

標準 C ライブラリ (libc, -lc)  

書式

#include <sys/time.h>

[[deprecated]]
int gettimeofday(struct timeval *restrict tv,
                 struct timezone *_Nullable restrict tz);
[[deprecated]]
int settimeofday(const struct timeval *tv,
                 const struct timezone *_Nullable tz);

glibc 向けの機能検査マクロの要件 (feature_test_macros(7) 参照):

settimeofday():

    glibc 2.19 よりあと:
        _DEFAULT_SOURCE
    glibc 2.19 以前:
        _BSD_SOURCE
 

説明

関数 gettimeofday() と settimeofday() は時刻とタイムゾーンを取得または設定します。

tv 引数は struct timeval(<sys/time.h>で定義)です:

struct timeval {
    time_t      tv_sec;     /* 秒 */
    suseconds_t tv_usec;    /* マイクロ秒 */ };

これにより紀元 (the Epoch: time(2) を参照) からの秒とマイクロ秒が取得できます。

The tz 引数は struct timezone です:

struct timezone {
    int tz_minuteswest;     /* グリニッジ標準時との差 (西方に分単位) */
    int tz_dsttime;         /* 夏時間調整の型 */ };

tv や tz が NULL の場合、対応する構造体の設定/取得は行われません (ただし、tv が NULL の場合には、コンパイル時の警告が発生します)。

timezone 構造体の使用は廃止されました。tz 引数は通常 NULL と指定すべきです。「バージョン」も参照してください。

Linux では、 settimeofday() システムコールに関連して、独特の "クロックのズレ (warp clock)" が存在する場合があります。これは (ブート後の) 最初の呼び出しで tz 引数が NULL でなく、 tv 引数が NULL で tz_minuteswest フィールドが 0 でない場合に起こります (この場合 tz_dsttime フィールドは 0 にすべきです)。このような場合、 settimeofday() は CMOS クロックが地方時 (local time) であり、UTC システム時間を得るためには、tz_minuteswest の分だけ増加させなくてはならないとみなしてしまいます。 疑いもなく、この機構を使うことは良い考えではありません。  

返り値

成功すると、 gettimeofday() と settimeofday() は 0 を返します。 エラーの場合、 -1 を返し、 errno にエラーを示す値を設定します。  

エラー

EFAULT
tv か tz のどちらかがアクセス可能なアドレス空間外を指しています。
EINVAL
(settimeofday()): timezone が無効です。
EINVAL
(settimeofday()): tv.tv_sec が負または tv.tv_usec が [0, 999,999] の範囲外です。
EINVAL (Linux 4.3 以降)
(settimeofday()): 時間を CLOCK_MONOTONIC クロックの現在の値よりも小さい値に設定しようとしました (clock_gettime(2) を参照)。
EPERM
呼び出し元プロセスに settimeofday() を呼び出すための十分な特権がありません。 Linux では CAP_SYS_TIME ケーパビリティ (capability) が必要です。
 

バージョン

 

C ライブラリ/kernel の違い

いくつかのアーキテクチャでは、gettimeofday() の実装は vdso(7) で提供されています。

カーネルは tv と tz の両方に対して NULL を受け付けます。timezone 引数は glibc と muslでは無視され、カーネルとの間で渡されません。Android の bionic は timezone 引数をカーネルとの間で渡しますが、Android は設定のデバイスタイムゾーンに基づいてカーネルタイムゾーンを更新しないので、カーネルのタイムゾーンは通常 UTC です。  

標準

なし。  

履歴

4.3 BSD,SVr4. SUSv1 と POSIX.1-2001 XSI は gettimeofday() を記述しましたが、settimeofday() は記述しませんでした。POSIX.1-2008 XSI は gettimeofday() を廃止としてマークし、代わりに clock_gettime(2) の使用を推奨しました。同様に、 settimeofday() の代わりに clock_settime(2) を使用すべきです。POSIX.1-2024 は gettimeofday() を削除しました。

昔は struct timeval のフィールドは long 型でした。  

tz_dsttime フィールド

Linux 以外のカーネルで、glibc では struct timezone の tz_dsttime フィールドは、現在のタイムゾーンに夏時間規則が適用されたことがあるか、適用される予定であれば、gettimeofday() によってゼロ以外の値に設定されます。この意味では、現在のタイムゾーンに対するdaylight(3) の意味を正確に反映しています。Linuxでは、glibc では struct timezone の tz_dsttime フィールド""の設定は、settimeofday() または gettimeofday() によって使用されたことはありません。これは libc や glibc ではサポートされておらず、今後もサポートされません。カーネルソースでこのフィールドが(宣言を除いて)発生するのはすべてバグです。したがって、以下は純粋に歴史的な関心事です。

tz_dsttime フィールドには (下記に示す) シンボル定数が格納されます。これは一年のうちでいつ夏時間 (Daylight Savings Time) を実施するかを示しています(注意: その値は年間を通した定数です: 夏時間が実施中であることを示すわけではなく、アルゴリズムを選択しているだけです)。夏時間は以下のように定義されます:

DST_NONE /* not on DST */ DST_USA /* USA style DST */ DST_AUST /* Australian style DST */ DST_WET /* Western European DST */ DST_MET /* Middle European DST */ DST_EET /* Eastern European DST */ DST_CAN /* Canada */ DST_GB /* Great Britain and Eire */ DST_RUM /* Romania */ DST_TUR /* Turkey */ DST_AUSTALT /* Australian style with shift in 1986 */

もちろん、夏時間が適用される期間は、国ごとに 1つの単純なアルゴリズムでは与えられないことがわかりました。実際、この期間は予測不可能な政治的決定によって決定されます。そのため、このタイムゾーンの表現方法は放棄されました。  

注意

gettimeofday() が返す時刻は、システム時間の不連続な変化(たとえば、システム管理者がシステム時間を手動で変更した場合など)の影響を受けます。単調増加するクロックが必要な場合は、clock_gettime(2) を参照してください。

timeval 構造体を操作するためのマクロの説明は timeradd(3) にあります。  

関連項目


 date(1), adjtimex(2), clock_gettime(2), time(2), ctime(3), ftime(3), timeradd(3), capabilities(7), time(7), vdso(7), hwclock(8)

関連キーワード

timezone   タイムゾーン   カーネル   struct   夏時間   timeval   dsttime   time   クロック   時間   gettime   時刻   minuteswest   構造体   適用   style   European   gettimeofday   settimeofday   deprecated   restrict   Nullable   マクロ   usec   マイクロ

Linux マニュアル 一覧

関連するコマンド・関数

settimeofday.2   daylight.3   timezone.3   tzname.3   tzset.3   asctime.3
 

Index

名前
ライブラリ
書式
説明
返り値
エラー
バージョン
C ライブラリ/kernel の違い
標準
履歴
tz_dsttime フィールド
注意
関連項目

This document was created by man2html, using the manual pages.
Time: 04:38:57 GMT, October 11, 2026