次の方法で共有


asctime_s, _wasctime_s

tm 時間構造体を文字列に変換します。 これらの関数は、「CRT のセキュリティ機能」で説明されているように、セキュリティが強化されたバージョンの asctime_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 を引いた数)

変換された文字列も、ローカル タイム ゾーンの設定に従って調整されます。 ローカル時刻の構成については、 time_time32_time64_ftime_ftime32_ftime64localtime_s_localtime32_s_localtime64_s 関数を参照してください。 タイム ゾーン環境とグローバル変数の定義については、 _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>

セキュリティ

バッファー ポインターが 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