名前空間
変種
操作

asctime, asctime_s

提供: cppreference.com
< c‎ | chrono
ヘッダ <time.h> で定義
char* asctime( const struct tm* time_ptr );
(1)
errno_t asctime_s(char *buf, rsize_t bufsz, const struct tm *time_ptr);
(2) (C11およびそれ以降)
1) 指定されたカレンダー時刻 tm を固定の25文字の書式のテキスト表現 Www Mmm dd hh:mm:ss yyyy\n に変換します。
  • Www - time_ptr->tm_wday が表す3文字の英語の曜日の省略形、 Mon, Tue, Wed, Thu, Fri, Sat, Sun のいずれか。
  • Mmm - time_ptr->tm_mon が表す3文字の英語の月名の省略形、 Jan, Feb, Mar, Apr, May, Jun, Jul, Aug, Sep, Oct, Nov, Dec のいずれか。
  • dd - %2d を用いた sprintf によって表示されたかのような timeptr->tm_mday が表す2桁の日。
  • hh - %.2d を用いた sprintf によって表示されたかのような timeptr->tm_hour が表す2桁の時。
  • mm - %.2d を用いた sprintf によって表示されたかのような timeptr->tm_min が表す2桁の分。
  • yyyy - %4d を用いた sprintf によって表示されたかのような timeptr->tm_year + 1900 が表す4桁の年。
*time_ptr のいずれかのメンバがその通常の範囲の外側の場合、動作は未定義です。
time_ptr->tm_year が表すカレンダー年が5桁以上または1000年未満の場合、動作は未定義です。
この関数はローカライゼーションをサポートせず、改行文字は削除することができません。
この関数は静的記憶域を変更し、スレッドセーフでありません。
2) (1) と同じですが、メッセージはユーザ定義の記憶域 buf にコピーされ (ヌル終端されることが保証されます)、以下のエラーが実行時に検出され、現在設定されている制約ハンドラ関数を呼びます。
  • buf または time_ptr がヌルポインタ。
  • bufsz が26より小さいまたは RSIZE_MAX より大きい。
  • *time_ptr のいずれかのメンバがその通常の範囲内でない。
  • time_ptr->tm_year が表す年が0より小さいまたは9999より大きい。
すべての境界チェック付き関数と同様に、 asctime_s__STDC_LIB_EXT1__ が処理系によって定義されていて、 <time.h> をインクルードする前にユーザが __STDC_WANT_LIB_EXT1__ を整数定数 1 に定義した場合にのみ、利用可能であることが保証されます。

目次

[編集] 引数

time_ptr - 表示する時刻を指定する tm オブジェクトを指すポインタ
buf - 少なくとも26バイトの長さのユーザ提供のバッファを指すポインタ
bufsz - ユーザ提供のバッファのサイズ

[編集] 戻り値

1) 上で説明した通りの日付と時刻のテキスト表現を保持する静的なヌル終端文字列を指すポインタ。 文字列は asctimectime で共有されているかもしれず、それらの関数の呼び出しのたびに上書きされるかもしれません。
2) 成功した場合はゼロ、失敗した場合は非ゼロ。 失敗した場合は buf[0] はゼロに設定されます (buf がヌルポインタでなく、 bufsz がゼロでなく RSIZE_MAX より大きくなければ)。

[編集] ノート

この関数は静的データを指すポインタを返し、スレッドセーフでありません。 POSIX はこの関数に時代遅れの印を付けており、代わりに strftime を推奨しています。 strftime の方が柔軟性が高くロケール対応であるため、 C 標準も asctime および asctime_s の代わりに strftime を推奨しています。

POSIX は未定義動作を出力文字列が25文字を超える場合、 timeptr->tm_wday または timeptr->tm_mon が期待される範囲内でない場合、または timeptr->tm_yearINT_MAX-1990 を超える場合のみに限定しています。

処理系によっては timeptr->tm_mday==0 を前月の最終日を意味するものとして処理します。

[編集]

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

出力例:

Tue May 26 21:51:50 2015
Tue May 26 21:51:50 2015

[編集] 参考文献

  • C11 standard (ISO/IEC 9899:2011):
  • 7.27.2.1 The asctime function (p: 392-393)
  • K.3.8.2.1 The asctime_s function (p: 624-625)
  • C99 standard (ISO/IEC 9899:1999):
  • 7.23.3.1 The asctime function (p: 341-342)
  • C89/C90 standard (ISO/IEC 9899:1990):
  • 4.12.3.1 The asctime function

[編集] 関連項目

time_t オブジェクトをテキスト表現に変換します
(関数) [edit]
tm オブジェクトをカスタムテキスト表現に変換します
(関数) [edit]