相关文章推荐
魁梧的小笼包  ·  PrintWriter与ServletOut ...·  2 月前    · 
温文尔雅的杨桃  ·  reactjs - 'TypeError ...·  1 年前    · 

tm 时间结构转换为字符串。 这些函数是版本 asctime _wasctime 具有 CRT 中安全功能 中所述的安全增强功能。

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 buffer 中的值

转换的字符串同时根据本地时区设置进行调整。 有关配置本地时间的信息,请参阅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 小时制。 所有字段都具有固定宽度。 换行符和空字符占据字符串的最后两个位置。 传入 numberOfElements 的值至少应为此大小。 如果更少,将返回错误代码 EINVAL

_wasctime_sasctime_s 的宽字符版本。 除此以外,_wasctime_sasctime_s 的行为完全相同。

这些函数的调试库版本首先用 0xFE 填充缓冲区。 若要禁用此行为,请使用 _CrtSetDebugFillThreshold

默认情况下,此函数的全局状态范围限定为应用程序。 若要更改此行为,请参阅 CRT 中的全局状态

泛型文本例程映射

TCHAR.H 例程 _UNICODE_MBCS 未定义 _MBCS 已定义 _UNICODE 已定义

如果缓冲区指针不是 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