当前位置: C语言 -- 附录 -- asctime_s

asctime_s函数


概要:
#define __STDC_WANT_LIB_EXT1__ 1
#include <time.h>
errno_t asctime_s(char *s, rsize_t maxsize, 
      const struct tm *timeptr);

描述:

该函数将参数timeptr指向的分解时间(broken-down time)转换成26个字符(包括空字符)组成的字符串,格式如下所示:

Sun Sep 16 01:03:52 1973\n\0

构成字符串的字符按顺序分别是:

1.timeptr->tm_wday表示的星期名称,具体使用以下名称:SunMonTueWedThuFriSat

2.空格符。

3.timeptr->tm_mon表示的月份名称,具体使用以下名称:JanFebMarAprMayJunJulAugSepOctNovDec

4.空格符。

5.timeptr->tm_mday值,就像使用格式字符串"%2d"调用fprintf函数一样。

6.空格符。

7.timeptr->tm_hour值,就像使用格式字符串"%.2d"调用fprintf函数一样。

8.冒号符。

9.timeptr->tm_min值,就像使用格式字符串"%.2d"调用fprintf函数一样。

10.冒号符。

11.timeptr->tm_sec值,就像使用格式字符串"%.2d"调用fprintf函数一样。

12.空格符。

13.timeptr->tm_year + 1900值,就像使用格式字符串"%4d"调用fprintf函数一样。

14.换行符。

15.空字符。


运行约束:

参数s和参数timeptr不能是空指针。参数maxsize应不小于26,且不大于宏RSIZE_MAX。参数timeptr指向的分解时间(broken-down time)应在正常范围内,其中日历年(timeptr->tm_year)应不小于0,且不大于9999

在存在运行约束冲突的情况下,函数不会尝试转换时间;如果参数s不是空指针,参数maxsize不等于0且不大于宏RSIZE_MAX,函数将s[0]设置为空字符。


参数:
char *s

指向char类型数组的指针。

rsize_t maxsize

参数s指向数组的最小数组长度。

const struct tm *timeptr

指向struct tm类型对象的指针。


返回值:

如果时间成功转换并存入参数s指向的数组,函数返回0;否则函数返回非0值。


范例:
1 
2 
3 
4 
5 
6 
7 
8 
9 
10 
11 
12 
13 
14 
15 
16 
17 
18 
19 
20 
21 
22 
23 
24 
25 
26 
27 
/*安全函数asctime_s范例*/

#define __STDC_WANT_LIB_EXT1__ 1
#include <stdio.h>
#include <time.h>

#define LENGTH 26

int main(void)
{
   const struct tm currentTime = {
        .tm_year = 117,
        .tm_mon = 6,
        .tm_mday = 16,
        .tm_wday = 0,
        .tm_hour = 19,
        .tm_min = 30,
        .tm_sec = 25
    };
    char str[LENGTH];
    
    if(!asctime_s(str, LENGTH, &currentTime))
        puts(str);

    return 0;
}


输出:

Sun Jul 16 19:30:25 2017

注:使用Visual Studio编译。


相关内容:
asctime struct tm类型对象转换为字符串的函数。