非常教程

C参考手册

日期与时间 | Date and time

asctime

在头文件<time.h>中定义

char * asctime(const struct tm * time_ptr);

(1)

errno_t asctime_s(char * buf,rsize_t bufsz,const struct tm * time_ptr);

(2)

(自C11以来)

1)将给定的日历时间tm转换为以下固定的25个字符格式的文本表示形式:Www Mmm dd hh:mm:ss yyyy\n

  • Www-本周三字母缩写英文从当天time_ptr->tm_wday的一个MonTueWedThuFriSatSun
  • Mmm-三个字母的缩写英文月份名称从time_ptr->tm_mon,一JanFebMarAprMayJunJulAugSepOctNovDec
  • dd- 月份的2位数日期,timeptr->tm_mday如同sprintf使用时一样打印%2d
  • hh- 从使用timeptr->tm_hour时打印两位小时sprintf%.2d
  • mm-从2位分钟timeptr->tm_min仿佛印刷通过sprintf使用%.2d
  • ss-来自2位第二timeptr->tm_sec仿佛印刷通过sprintf使用%.2d
  • yyyy- 从使用timeptr->tm_year + 1900时打印出来的4位数年份sprintf%4d

如果任何成员*time_ptr超出其正常范围,则行为是不确定的

如果指示的time_ptr->tm_year日历年份超过4位或小于1000 年,则行为不明确。

该函数不支持本地化,并且不能删除换行符。

The function modifies static storage and is not thread-safe.

2)与(1)相同,不同之处在于消息被复制到用户提供的存储器buf中,并保证以 null 结尾,并且在运行时检测到以下错误并调用当前安装的约束处理函数:

  • buf或者time_ptr是空指针
  • bufsz 小于26或大于 RSIZE_MAX
  • 并非所有成员*time_ptr都在正常范围内
  • 指示的年份time_ptr->tm_year小于0或大于9999

作为所有边界检查函数,asctime_s只有在被__STDC_LIB_EXT1__实现定义__STDC_WANT_LIB_EXT1__并且1在包含time.h之前用户定义为整数常量时才能保证可用。

参数

time_ptr

-

指向指定打印时间的tm对象的指针

buf

-

指向用户提供的缓冲区的指针,长度至少为26个字节

bufsz

-

用户提供的缓冲区的大小

返回值

1)指向一个静态的以 null 结束的字符串的指针,持有如上所述的日期和时间的文本表示。该字符串可以在asctimectime之间共享,并且可以在每次调用任何这些函数时被覆盖。

2)成功为零,失败时为非零,在这种情况下buf[0]设置为零(除非buf是空指针或者bufsz零或大于RSIZE_MAX)。

笔记

该函数返回一个指向静态数据的指针,并且不是线程安全的。POSIX将此功能标记为废弃,并推荐strftime使用。C标准也建议strftime而不要使用asctimeasctime_s因为strftime它更灵活且对语言环境敏感。

POSIX 限制未定义的行为仅限于输出字符串超过25个字符,timeptr->tm_wdaytimeptr->tm_mon不在预期范围内或当timeptr->tm_year超过时INT_MAX-1990

一些实现处理timeptr->tm_mday==0意味着前一个月的最后一天。

示例

#define __STDC_WANT_LIB_EXT1__ 1
#include <time.h>
#include <stdio.h>
 
int main(void)
{
    struct tm tm = *localtime(&(time_t){time(NULL)});
    printf("%s", asctime(&tm));
 
#ifdef __STDC_LIB_EXT1__
    char str[26];
    asctime_s(str, sizeof str, &tm);
    printf("%s", str);
#endif
}

可能的输出:

Tue May 26 21:51:50 2015
Tue May 26 21:51:50 2015

参考

  • C11标准(ISO / IEC 9899:2011):
    • 7.27.2.1 asctime 函数(p:392-393)
    • K.3.8.2.1 asctime_s 函数(p:624-625)
  • C99标准(ISO / IEC 9899:1999):
    • 7.23.3.1 asctime 函数(p:341-342)
  • C89 / C90标准(ISO / IEC 9899:1990):
    • 4.12.3.1 asctime 函数
C

C 语言是一门通用计算机编程语言,应用广泛。C 语言的设计目标是提供一种能以简易的方式编译、处理低级存储器、产生少量的机器码以及不需要任何运行环境支持便能运行的编程语言。