名前空間
変種
操作

asctime, asctime_s

From cppreference.com
< c‎ | chrono
ヘッダー <time.h> で定義
(1)
char*                asctime( const struct tm* time_ptr );
(C23まで)
[[deprecated]] char* asctime( const struct tm* time_ptr );
(C23以降)
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 - timeptr->tm_mday からの2桁の日付。%2d を使用して sprintf で出力された場合と同様。
  • hh - timeptr->tm_hour からの2桁の時。%.2d を使用して sprintf で出力された場合と同様。
  • mm - timeptr->tm_min からの2桁の分。%.2d を使用して sprintf で出力された場合と同様。
  • ss - timeptr->tm_sec からの2桁の秒。%.2d を使用して sprintf で出力された場合と同様。
  • yyyy - timeptr->tm_year + 1900 からの4桁の年。%4d を使用して sprintf で出力された場合と同様。
*time_ptr のいずれかのメンバーがその通常の範囲外である場合、動作は未定義である。
time_ptr->tm_year で示される暦年が4桁を超えるか、1000年未満である場合、動作は未定義である。
この関数はローカライズをサポートせず、改行文字を削除することはできない。
この関数は静的ストレージを変更し、スレッドセーフではない。
この関数は非推奨であり、新しいコードでは使用すべきではない。
(C23以降)
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) 上記で説明した日付と時刻のテキスト表現を保持する、静的なヌル終端文字文字列へのポインタ。この文字列は `asctime` と ctime の間で共有される可能性があり、これらの関数のいずれかを呼び出すたびに上書きされる可能性がある。
2) 成功した場合はゼロ、失敗した場合は非ゼロ。失敗した場合、buf[0] はゼロに設定される (ただし、buf がヌルポインタであるか、bufsz がゼロであるか、RSIZE_MAX より大きい場合を除く)。

[編集] 備考

`asctime` は静的データへのポインタを返し、スレッドセーフではない。POSIXはこの関数を廃止予定とマークし、代わりに strftime を推奨している。C標準も、`strftime` がより柔軟でロケールに対応しているため、`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 <stdio.h>
#include <time.h>
 
int main(void)
{
    struct tm tm = *localtime(&(time_t){time(NULL)});
    printf("%s", asctime(&tm)); // note implicit trailing '\n'
 
#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

[編集] 参照

  • C17標準 (ISO/IEC 9899:2018)
  • 7.27.2.1 The asctime function (p: 287)
  • K.3.8.2.1 The asctime_s function (p: 453-454)
  • C11標準 (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標準 (ISO/IEC 9899:1999)
  • 7.23.3.1 The asctime function (p: 341-342)
  • C89/C90標準 (ISO/IEC 9899:1990)
  • 4.12.3.1 The asctime function

[編集] 関連項目

(C23で非推奨)(C11)
time_t オブジェクトをテキスト表現に変換する
(関数) [編集]
tm オブジェクトをカスタムのテキスト表現に変換する
(関数) [編集]
English 日本語 中文(简体) 中文(繁體)