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 メンバー | 値 |
---|---|
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
、 _ftime64
、 localtime_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_s
と asctime_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