Namespaces
Variants

ctime, ctime_s

From cppreference.net
定義先ヘッダ <time.h>
(1)
char * ctime ( const time_t * timer ) ;
(C23まで)
[ [ deprecated ] ] char * ctime ( const time_t * timer ) ;
(C23以降)
errno_t ctime_s ( char * buf, rsize_t bufsz, const time_t * timer ) ;
(2) (C11以降)
1) エポックからの経過時間をカレンダー現地時間に変換し、次にテキスト表現に変換します。これは asctime ( localtime ( timer ) ) または asctime ( localtime_r ( timer, & ( struct tm ) { 0 } ) ) (C23以降) を呼び出した場合と同様です。 この関数は非推奨であり、新しいコードでは使用すべきではありません。 (C23以降)
2) (1) と同様であるが、関数は asctime_s ( buf, bufsz, localtime_s ( timer, & ( struct tm ) { 0 } ) ) と等価であり、以下のエラーが実行時に検出され、現在インストールされている constraint handler 関数を呼び出す:
  • buf または timer がnullポインタである
  • bufsz 26 より小さいか、 RSIZE_MAX より大きい
すべての境界チェック付き関数と同様に、 ctime_s は、実装によって __STDC_LIB_EXT1__ が定義されており、かつユーザーが <time.h> をインクルードする前に __STDC_WANT_LIB_EXT1__ を整数定数 1 に定義している場合にのみ利用可能であることが保証される。

結果の文字列は以下の形式を持ちます:

Www Mmm dd hh:mm:ss yyyy\n
  • Www - 曜日( Mon Tue Wed Thu Fri Sat Sun のいずれか)。
  • Mmm - 月( Jan Feb Mar Apr May Jun Jul Aug Sep Oct Nov Dec のいずれか)。
  • dd - 月の日
  • hh - 時間
  • mm - 分
  • ss - 秒
  • yyyy - 年

この関数はローカライゼーションをサポートしていません。

目次

パラメータ

timer - time_t オブジェクトへのポインタ。表示する時間を指定します
buf - 少なくともサイズ bufsz のchar配列の最初の要素へのポインタ
bufsz - 出力する最大バイト数。通常は buf が指すバッファのサイズ

戻り値

1) 日付と時刻の文字列表現を保持する静的ナル終端文字列へのポインタ。この文字列は asctime ctime の間で共有される可能性があり、これらの関数のいずれかが呼び出されるたびに上書きされる可能性があります。
2) 成功時はゼロ(この場合、時間の文字列表現は buf が指す配列に書き出されている)、失敗時は非ゼロ(この場合、終端ナル文字は常に buf [ 0 ] に書き込まれる。ただし buf がナルポインタの場合、または bufsz がゼロまたは RSIZE_MAX より大きい場合は除く。

注記

ctime は静的データへのポインタを返し、スレッドセーフではありません。さらに、これは静的 tm オブジェクトを変更し、これは gmtime および localtime と共有される可能性があります。POSIXはこの関数を廃止予定とし、代わりに strftime の使用を推奨しています。C標準も ctime および ctime_s の代わりに strftime を推奨しています。なぜなら strftime はより柔軟でロケール対応であるためです。

ctime の動作は、25文字を超える文字列を生成する time_t の値(例:10000年)に対して未定義です。

#define __STDC_WANT_LIB_EXT1__ 1
#include <time.h>
#include <stdio.h>
int main(void)
{
    time_t result = time(NULL);
    printf("%s", ctime(&result));
#ifdef __STDC_LIB_EXT1__
    char str[26];
    ctime_s(str,sizeof str,&result);
    printf("%s", str);
#endif
}

出力例:

Tue May 26 21:51:03 2015
Tue May 26 21:51:03 2015

参考文献

  • C17規格 (ISO/IEC 9899:2018):
  • 7.27.3.2 ctime関数 (p: 287-288)
  • K.3.8.2.2 ctime_s関数 (p: 454)
  • C11規格 (ISO/IEC 9899:2011):
  • 7.27.3.2 ctime関数 (p: 393)
  • K.3.8.2.2 ctime_s関数 (p: 626)
  • C99規格 (ISO/IEC 9899:1999):
  • 7.23.3.2 ctime関数 (p: 342)
  • C89/C90標準 (ISO/IEC 9899:1990):
  • 4.12.3.2 ctime関数

関連項目

(C23で非推奨) (C11)
tm オブジェクトをテキスト表現に変換する
(関数)
tm オブジェクトをカスタムテキスト表現に変換する
(関数)