asctime_s, _wasctime_s

tm 時間構造体を文字列に変換します。 これらの関数は、CRTasctime_wasctimeセキュリティ機能の説明に従ってセキュリティが強化されたバージョンの関数です。

構文

errno_t asctime_s(
   char* buffer,
   size_t numberOfElements,
   const struct tm *tmSource
);
errno_t _wasctime_s(
   wchar_t* buffer,
   size_t numberOfElements
   const struct tm *tmSource
);
template <size_t size>
errno_t asctime_s(
   char (&buffer)[size],
   const struct tm *tmSource
); // C++ only
template <size_t size>
errno_t _wasctime_s(
   wchar_t (&buffer)[size],
   const struct tm *tmSource
); // C++ only

パラメーター

buffer
文字列結果を格納するバッファーへのポインター。 この関数は、numberOfElements で指定されたサイズの有効なメモリ位置へのポインターを前提としています。

numberOfElements
結果を格納するために使用するバッファーのサイズ。

tmSource
時刻/日付の構造体。 この関数は、有効な struct tm オブジェクトへのポインターを前提としています。

戻り値

正常終了した場合は 0。 エラーが発生した場合は、「パラメーターの検証」で説明されているように、無効なパラメーター ハンドラーが呼び出されます。 実行の継続が許可された場合、戻り値はエラー コードになります。 エラー コードは、ERRNO.H で定義されています。 詳細については、定数を参照してください。errno 各エラー条件に対して返される実際のエラー コードを、次の表に示します。

エラー条件

buffer numberOfElements tmSource Return buffer の値
NULL Any Any EINVAL Not modified
NULL ではありません (有効なメモリを指します) 0 [任意] EINVAL Not modified
NULL ではない 0<numberOfElements< 26 [任意] EINVAL 空の文字列
NULL ではない >= 26 NULL EINVAL 空の文字列
NULL ではない >= 26 無効な時間構造体または時間のコンポーネントの値が範囲外 EINVAL 空の文字列

Note

wasctime_s のエラー条件は、単語単位でサイズの上限を測定する例外がある asctime_s と同じです。

解説

asctime 関数は、構造体として格納されている時間を文字列に変換します。 この値は tmSource 通常、次の呼び出し gmtime から取得されます localtime。 TIME.H で定義されているように、どちらの関数も tm 構造体に入力するために使用できます。

timeptr メンバー Value
tm_hour 時 (0 から 23)
tm_isdst 夏時間が有効な場合は正。夏時間が有効でない場合は 0。夏時間の状態が不明な場合は負の値です。 C ランタイム ライブラリでは、アメリカ合衆国の規則を前提に夏時間 (DST) を計算します。
tm_mday 月の日 (1 から 31)
tm_min 分 (0 - 59)
tm_mon 月 (0 - 11、1 月 = 0)
tm_sec 秒 (0 - 59)
tm_wday 曜日 (0 - 6、日曜日 = 0)
tm_yday 年内の通算日 (0 から 365、1 月 1 日 = 0)
tm_year 年 (実際の西暦から 1900 を引いた数)

変換された文字列も、ローカル タイム ゾーンの設定に従って調整されます。 ローカル時刻の構成の詳細については、,, _time32, _time64, , _ftime, _ftime32, _ftime64_localtime32_slocaltime_s_localtime64_sの関数を参照してください。time タイム ゾーン環境とグローバル変数の定義については、以下を参照してください _tzset

asctime_s によって生成される文字列には、26 文字が含まれ、Wed Jan 2 02:03:55 1980\n\0 の形式となります。 24 時間制が使用されます。 すべてのフィールドには一定の幅があります。 文字列の最後の 2 つの位置には、改行文字と null 文字が入ります。 渡される numberOfElements 値は、少なくともこのサイズである必要があります。 小さい場合は、エラー コードが EINVAL返されます。

_wasctime_s 関数は、asctime_s 関数のワイド文字バージョンです。 それ以外では、_wasctime_sasctime_s の動作は同じです。

これらの関数のデバッグ ライブラリ バージョンでは、最初にバッファーを 0xFE で埋めます。 この動作を無効にするには、_CrtSetDebugFillThreshold を使用します。

既定では、この関数のグローバル状態の適用対象は、アプリケーションになります。 この動作を変更するには、「CRT のグローバル状態」を参照してください

汎用テキスト ルーチン マッピング

TCHAR.H のルーチン _UNICODE_MBCS が定義されていない _MBCS が定義されている _UNICODE が定義されている
_tasctime_s asctime_s asctime_s _wasctime_s

C++ では、テンプレートのオーバーロードによってこれらの関数を簡単に使用できます。オーバーロードでは、バッファー長を自動的に推論できるため、サイズ引数を指定する必要がなくなります。 詳細については、「セキュリティで保護されたテンプレート オーバーロード」を参照してください

必要条件

ルーチンによって返される値 必須ヘッダー
asctime_s <time.h>
_wasctime_s <time.h> または <wchar.h>

Security

バッファー ポインターが存在せず NULL 、ポインターが有効なバッファーを指していない場合、関数はその場所にあるものを上書きします。 このエラーにより、アクセス違反が発生する可能性もあります。

渡されるサイズ引数がバッファーの実際のサイズより大きい場合、バッファー オーバーランが発生する場合があります。

このプログラムは、システム時刻を長整数 aclockに配置し、それを構造体 newtimeに変換し、関数を使用して出力用の文字列形式に asctime_s 変換します。

// crt_asctime_s.c
#include <time.h>
#include <stdio.h>

struct tm newtime;
__time32_t aclock;

int main( void )
{
   char buffer[32];
   errno_t errNum;
   _time32( &aclock );   // Get time in seconds.
   _localtime32_s( &newtime, &aclock );   // Convert time to struct tm form.

   // Print local time as a string.

   errNum = asctime_s(buffer, 32, &newtime);
   if (errNum)
   {
       printf("Error code: %d", (int)errNum);
       return 1;
   }
   printf( "Current date and time: %s", buffer );
   return 0;
}
Current date and time: Wed May 14 15:30:17 2003

関連項目

時間管理
ctime_s, _ctime32_s, _ctime64_s, _wctime_s, _wctime32_s, _wctime64_s
_ftime, _ftime32, _ftime64
gmtime_s, _gmtime32_s, _gmtime64_s
localtime_s, _localtime32_s, _localtime64_s
time, _time32, _time64
_tzset