asctime_s、_wasctime_s
更新 : 2007 年 11 月
tm 時刻構造体を文字列に変換します。これらの関数は、「CRT のセキュリティ強化」に説明されているように、asctime、_wasctime のセキュリティが強化されたバージョンです。
errno_t asctime_s(
char* buffer,
size_t numberOfElements,
const struct tm *_tm
);
errno_t _wasctime_s(
wchar_t* buffer,
size_t numberOfElements
const struct tm *_tm
);
template <size_t size>
errno_t asctime_s(
char (&buffer)[size],
const struct tm *_tm
); // C++ only
template <size_t size>
errno_t _wasctime_s(
wchar_t (&buffer)[size],
const struct tm *_tm
); // C++ only
パラメータ
buffer
[出力] 結果の文字列を格納するバッファへのポインタ。この関数では、numberOfElements で指定されたサイズの有効なメモリ位置へのポインタであることを前提としています。numberOfElements
[入力] 結果を格納するために使用されるバッファのサイズ。_tm
[入力] 日付/時刻構造体。この関数では、有効な structtm オブジェクトへのポインタであることを前提としています。
戻り値
正常に終了した場合は 0 を返します。エラーが発生した場合は、「パラメータの検証」に説明されているように、無効なパラメータ ハンドラが呼び出されます。実行の継続が許可された場合、戻り値はエラー コードになります。エラー コードは ERRNO.H で定義されています。詳細については「errno 定数」を参照してください。次の表に、各エラー条件に対して返される実際のエラー コードを示します。
エラー条件
buffer |
numberOfElements |
tm |
Return |
buffer の値 |
---|---|---|---|---|
NULL |
どれでも可 |
どれでも可 |
EINVAL |
変更されない |
NULL 以外 (有効なメモリを指し示している) |
0 |
どれでも可 |
EINVAL |
変更されない |
NULL 以外 |
0 < サイズ < 26 |
どれでも可 |
EINVAL |
空の文字列 |
NULL 以外 |
>= 26 |
NULL |
EINVAL |
空の文字列 |
NULL 以外 |
>= 26 |
無効な時刻構造体または時刻コンポーネントの範囲外の値 |
EINVAL |
空の文字列 |
メモ : |
---|
wasctime_s のエラー条件は、サイズの制限がワード単位で設定される点を除いて asctime_s と同様です。 |
解説
asctime 関数は、構造体として格納されている時刻を文字列に変換します。_tm 値は通常、gmtime または localtime の呼び出しにより取得されます。どちらの関数も、TIME.H で定義されているように、tm 構造体を設定するために使用できます。
timeptr のメンバ |
値 |
---|---|
tm_hour |
時 (0 ~ 23)。 |
tm_isdst |
夏時間が有効な場合は正、夏時間が有効でない場合は 0、夏時間の状態が不明の場合は負。C ランタイム ライブラリは、夏時間 (DST: Daylight Saving Time) 計算の実装については米国の規則を前提としています。 |
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 02 02:03:55 1980\n\0 という形式になります。時刻は 24 時間制です。すべてのフィールドは固定幅です。文字列の終端には、改行文字および null 文字が入ります。2 番目のパラメータとして渡される値は、最低でもこの大きさである必要があります。その大きさに満たない場合は、エラー コード EINVAL が返されます。
ワイド文字を扱う場合は、asctime_s ではなく _wasctime_s を使用します。それ以外では、_wasctime_s と asctime_s の動作は同じです。
汎用テキスト ルーチンのマップ
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
.NET Framework の相当するアイテム
参照
参照
ctime_s、_ctime32_s、_ctime64_s、_wctime_s、_wctime32_s、_wctime64_s
_gmtime_s、_gmtime32_s、_gmtime64_s