localtime, localtime_r, localtime_s
From cppreference.com
| ヘッダー <time.h> で定義 |
||
| (1) | ||
| (2) | (C23以降) | |
| (3) | (C11 以降) | |
1) エポックからの指定された時間 (timer が指す time_t 値) を、ローカル時間で表現されたカレンダー時間 (
struct tm 形式) に変換します。結果は静的ストレージに格納され、その静的ストレージへのポインタが返されます。2) (1) と同じですが、関数が結果のためにユーザー提供のストレージ buf を使用する点が異なります。
3) (1) と同じですが、関数が結果のためにユーザー提供のストレージ buf を使用する点と、以下のエラーが実行時に検出され、現在インストールされている 制約ハンドラ 関数を呼び出す点が異なります。
- timer または buf がヌルポインタである場合。
- すべての境界チェック関数と同様に、`localtime_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 ポインタのコピー、またはエラー時 (ランタイム制約違反または指定された時間をローカルカレンダー時間に変換できなかった場合) のヌルポインタ。
[編集] 備考
`localtime` 関数はスレッドセーフではない可能性があります。
POSIXでは、引数が大きすぎるために`localtime`および`localtime_r`が失敗した場合、errnoをEOVERFLOWに設定することを要求しています。
POSIXは、タイムゾーン情報が`localtime`および`localtime_r`によって、環境変数TZを読み取る`tzset`を呼び出すかのように決定されると規定しています。
Microsoft CRTにおける`localtime_s`の実装は、パラメータの順序が逆であり、errno_tを返すため、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-specific 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.4 localtime 関数 (p: TBD)
- K.3.8.2.4 localtime_s 関数 (p: TBD)
- C17標準 (ISO/IEC 9899:2018)
- 7.27.3.4 localtime 関数 (p: 288)
- K.3.8.2.4 localtime_s 関数 (p: 455)
- C11標準 (ISO/IEC 9899:2011)
- 7.27.3.4 localtime 関数 (p: 394)
- K.3.8.2.4 localtime_s 関数 (p: 627)
- C99標準 (ISO/IEC 9899:1999)
- 7.23.3.4 localtime 関数 (p: 343)
- C89/C90標準 (ISO/IEC 9899:1990)
- 4.12.3.4 localtime 関数
[編集] 関連項目
| (C23)(C11) |
エポックからの時間を、協定世界時 (UTC) で表されるカレンダー時間に変換する (関数) |
| localtime のための C++ ドキュメント
| |