ctime_s, _ctime32_s, _ctime64_s, _wctime_s, _wctime32_s, _wctime64_s

转换时间值转换为字符串并为本地时区设置调整。 这些是 ctime, _ctime64, _wctime, _wctime64 的版本与安全增强的 CRT中的安全功能如中所述。

errno_t ctime_s( 
   char* buffer,
   size_t numberOfElements,
   const time_t *time 
);
errno_t _ctime32_s( 
   char* buffer,
   size_t numberOfElements,
   const __time32_t *time 
);
errno_t _ctime64_s( 
   char* buffer,
   size_t numberOfElements,
   const __time64_t *time )
;
errno_t _wctime_s( 
   wchar_t* buffer,
   size_t numberOfElements,
   const time_t *time 
);
errno_t _wctime32_s( 
   wchar_t* buffer,
   size_t numberOfElements,
   const __time32_t *time 
);
errno_t _wctime64_s( 
   wchar_t* buffer,
   size_t numberOfElements,
   const __time64_t *time 
);
template <size_t size>
errno_t _ctime32_s( 
   char (&buffer)[size],
   const __time32_t *time 
); // C++ only
template <size_t size>
errno_t _ctime64_s( 
   char (&buffer)[size],
   const __time64_t *time
); // C++ only
template <size_t size>
errno_t _wctime32_s( 
   wchar_t (&buffer)[size],
   const __time32_t *time 
); // C++ only
template <size_t size>
errno_t _wctime64_s( 
   wchar_t (&buffer)[size],
   const __time64_t *time 
); // C++ only

参数

  • [out]buffer
    必须足以容纳 26 个字符。 对字符字符串结果的指针或 NULL,则:

    • time 午夜, 1970 年一月 1 日, UTC 之前表示日期。

    • 如果使用 _ctime32_s 或 _wctime32_s 和 time 表示一个日期。 03:14 后面: 一月 07 日 19 日 2038。

    • 如果使用 _ctime64_s 或 _wctime64_s 和 time 表示一个日期。 23:59 后面: 59, 3000 年十二月 31 日,, UTC。

    • 如果使用 _ctime_s 或 _wctime_s,这些功能是包装到上个月功能。 请参见“备注”部分。

  • [in] numberOfElements
    缓冲区的大小。

  • [in] time
    为内存的指针。

返回值

零,如果成功。 如果有错误由于一个无效参数,参数无效调用处理程序,如 参数验证所述。 如果执行允许继续,错误代码返回。 错误代码。 ERRNO.H 定义;有关列出了这些错误,请参见 errno。 为每个错误状态引发的实际错误代码如下表所示。

错误状态

buffer

numberOfElements

time

Return

在 buffer的值

NULL

任何

任何

EINVAL

不修改

不是 NULL (指向有效的内存)

0

任何

EINVAL

不修改

不是 NULL

0AMP_LT 范围 AMP_LT 26

任何

EINVAL

空字符串

不是 NULL

AMP_GT= 26

NULL

EINVAL

空字符串

不是 NULL

AMP_GT= 26

< 0

EINVAL

空字符串

备注

ctime_s 函数转换为 time_t 结构存储的时间值转换为字符串。 time 值在调用通常获取到 时间,返回秒数从 00:00 (午夜过后: 00), 1970 年一月 1 日,世界 (UTC)时 (utc)。 返回值字符串只包含 26 个字符并具有以下形式:

Wed Jan 02 02:03:55 1980\n\0

使用 24 小时制。 所有字段都有一个固定宽度。 新行字符 (“\ n) 并将 null 字符 (“\ 0 ") 占据将字符串中的前两个位置。

转换后的字符字符串具体取决于本地时区设置也会调整。 有关定义时区环境和全局变量的信息,请参见 time、 _ftimelocaltime32_s 功能有关配置本地时间和 _tzset 功能的信息。

_wctime32_s 和 _wctime64_s 是 _ctime32_s 的宽字符版本和 _ctime64_s;返回宽字符字符串的指针。 否则, _ctime64_s、 _wctime32_s和 _wctime64_s 方法的行为与 _ctime32_s。

ctime_s 是计算结果为 _ctime64_s ,并 time_t 与 __time64_t等效的内联函数。 如果需要强制编译器解释 time_t 为旧 32 位 time_t,可以定义 _USE_32BIT_TIME_T。 这样做将导致 ctime_s 计算为 _ctime32_s。 建议不要这样做,因为应用程序可以在 2038 年一月 18 日之后,失败,并且在 64 位平台不允许的。

在 C++ 中,使用这些功能由模板重载简化;重载可以自动推断缓冲区长度,而无需指定范围参数。 有关更多信息,请参见 安全模板重载

一般文本例程映射

TCHAR.H 实例

未定义的 _UNICODE _MBCS

定义的 _MBCS

定义的 _UNICODE

_tctime_s

ctime_s

ctime_s

_wctime_s

_tctime32_s

_ctime32_s

_ctime32_s

_wctime32_s

_tctime64_s

_ctime64_s

_ctime64_s

_wctime64_s

要求

实例

必需的头

ctime_s,

_ctime32_s,

_ctime64_s

time.h

_wctime_s,

_wctime32_s,

_wctime64_s

time.h 或 wchar.h

有关其他的兼容性信息,请参见中介绍的 兼容性

C 运行库的所有版本。

示例

// crt_wctime_s.c
/* This program gets the current
 * time in time_t form and then uses _wctime_s to
 * display the time in string form.
 */

#include <time.h>
#include <stdio.h>

#define SIZE 26

int main( void )
{
   time_t ltime;
   wchar_t buf[SIZE];
   errno_t err;

   time( &ltime );

  
   err = _wctime_s( buf, SIZE, &ltime );
   if (err != 0)
   {
      printf("Invalid Arguments for _wctime_s. Error Code: %d\n", err);
   }
   wprintf_s( L"The time is %s\n", buf );
}

示例输出

The time is Fri Apr 25 13:03:39 2003

.NET Framework 等效项

请参见

参考

时间线

asctime_s, _wasctime_s

ctime, _ctime32, _ctime64, _wctime, _wctime32, _wctime64

_ftime, _ftime32, _ftime64

gmtime_s, _gmtime32_s, _gmtime64_s

localtime_s, _localtime32_s, _localtime64_s

time, _time32, _time64