次の方法で共有


asctime_s、_wasctime_s

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
    [入力] 日付/時刻構造体。 この関数では、有効な struct tm オブジェクトへのポインターであることを前提としています。

戻り値

正常に終了した場合は 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 が返されます。

_wasctime_s は、asctime_s のワイド文字バージョンです。 それ以外では、_wasctime_sasctime_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>

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;
}
  

同等の .NET Framework 関数

参照

参照

時間管理

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