gmtime, gmtime_r, gmtime_s
From cppreference.net
|
ヘッダーで定義
<time.h>
|
||
| (1) | ||
| (2) | (C23以降) | |
| (3) | (C11以降) | |
1)
エポックからの経過時間(
time_t
値で
timer
が指す)をカレンダー時間に変換し、協定世界時(UTC)で
struct tm
形式で表現します。結果は静的ストレージに格納され、その静的ストレージへのポインタが返されます。
2)
(1)
と同様ですが、この関数は結果のためにユーザー提供のストレージ
buf
を使用します。
3)
(1)
と同様ですが、関数は結果のためにユーザー提供のストレージ
buf
を使用し、以下のエラーが実行時に検出され、現在インストールされている
制約ハンドラ
関数を呼び出す点が異なります:
-
- timer または buf がヌルポインタである場合
-
すべての境界チェック付き関数と同様に、
gmtime_sは、実装によって __STDC_LIB_EXT1__ が定義されており、かつユーザーが <time.h> をインクルードする前に __STDC_WANT_LIB_EXT1__ を整数定数 1 に定義している場合にのみ利用可能であることが保証されます。
目次 |
パラメータ
| timer | - | time_t オブジェクトへのポインタ(変換対象) |
| buf | - | 結果を格納する struct tm オブジェクトへのポインタ |
戻り値
1)
成功時は静的内部
tm
オブジェクトへのポインタ、それ以外の場合はヌルポインタ。この構造体は
gmtime
、
localtime
および
ctime
間で共有される可能性があり、各呼び出し時に上書きされる可能性があります。
2,3)
buf
ポインタのコピー、またはエラー時のヌルポインタ(実行時制約違反または指定された時刻をUTCに変換する際の失敗である可能性があります)。
注記
gmtime
はスレッドセーフではない可能性があります。
POSIXでは、
gmtime
および
gmtime_r
は、引数が大きすぎるために失敗した場合、
errno
を
EOVERFLOW
に設定することを要求しています。
gmtime_s
の実装は、
Microsoft CRT
において、パラメータの順序が逆になっているため、C標準規格に非互換です。
例
このコードを実行
#define __STDC_WANT_LIB_EXT1__ 1 #define _XOPEN_SOURCE // for putenv #include <stdio.h> #include <stdlib.h> // for putenv #include <time.h> int main(void) { time_t t = time(NULL); printf("UTC: %s", asctime(gmtime(&t))); printf("local: %s", asctime(localtime(&t))); // POSIX固有 putenv("TZ=Asia/Singapore"); printf("Singapore: %s", asctime(localtime(&t))); #ifdef __STDC_LIB_EXT1__ struct tm buf; char str[26]; asctime_s(str, sizeof str, gmtime_s(&t, &buf)); printf("UTC: %s", str); asctime_s(str, sizeof str, localtime_s(&t, &buf)); printf("local: %s", str); #endif }
出力例:
UTC: Fri Sep 15 14:22:05 2017 local: Fri Sep 15 14:22:05 2017 Singapore: Fri Sep 15 22:22:05 2017 UTC: Fri Sep 15 14:22:05 2017 local: Fri Sep 15 14:22:05 2017
参考文献
- C23規格 (ISO/IEC 9899:2024):
-
- 7.27.3.3 gmtime関数 (p: TBD)
-
- K.3.8.2.3 gmtime_s関数 (p: TBD)
- C17規格 (ISO/IEC 9899:2018):
-
- 7.27.3.3 gmtime関数 (p: 288)
-
- K.3.8.2.3 gmtime_s関数 (p: 454-455)
- C11規格 (ISO/IEC 9899:2011):
-
- 7.27.3.3 gmtime関数 (p: 393-394)
-
- K.3.8.2.3 gmtime_s関数 (p: 626-627)
- C99規格 (ISO/IEC 9899:1999):
-
- 7.23.3.3 gmtime関数 (p: 343)
- C89/C90標準 (ISO/IEC 9899:1990):
-
- 4.12.3.3 gmtime関数
関連項目
|
(C23)
(C11)
|
エポックからの経過時間を現地時間で表した暦時間に変換する
(関数) |
|
C++ documentation
for
gmtime
|
|