man 3 ctime中文手册

名称

asctime, ctime, gmtime, localtime, mktime, asctime_r, ctime_r, gmtime_r, localtime_r - 将日期和时间转换为分解时间(broken-down time)或ASCII码

概要

#include <time.h>

char *asctime(const struct tm *tm);
char *asctime_r(const struct tm *tm, char *buf);

char *ctime(const time_t *timep);
char *ctime_r(const time_t *timep, char *buf);

struct tm *gmtime(const time_t *timep);
struct tm *gmtime_r(const time_t *timep, struct tm *result);

struct tm *localtime(const time_t *timep);
struct tm *localtime_r(const time_t *timep, struct tm *result);

time_t mktime(struct tm *tm);

描述

    ctime()、gmtime() 和 localtime() 函数都采用数据类型为 time_t 的参数,该参数表示日历时间。当解释为绝对时间值时,它表示自纪元1970-01-01 00:00:00 +0000 (UTC) 以来经过的秒数。
    asctime() 和 mktime() 函数都接受一个表示分解时间的参数,分解时间表示为年、月、日等。
    分解时间存储在结构体 tm 中,结构体 tm 在 <time.h> 中定义如下:

struct tm {
    
    
    int tm_sec;         /* seconds */
    int tm_min;         /* minutes */
    int tm_hour;        /* hours */
    int tm_mday;        /* day of the month */
    int tm_mon;         /* month */
    int tm_year;        /* year */
    int tm_wday;        /* day of the week */
    int tm_yday;        /* day in the year */
    int tm_isdst;       /* daylight saving time */
};

tm 结构的成员是:
tm_sec
    分钟后的秒数,通常在0到59之间,但最多可以达到60以允许闰秒。
tm_min
    小时后的分钟数,在0到59之间。
tm_hour
    午夜过后的小时数,在0到23之间。
tm_mday
    每月的某天,范围为1到31。
tm_mon
    自一月以来的月数,在0到11之间。
tm_year
    自1900年以来的年数。
tm_wday
    从星期日开始的天数,范围为0到6。
tm_yday
    自1月1日以来的天数,范围为0到365。
tm_isdst
    一个标志,指示夏时制是否在所述时间生效。如果夏令时有效,则该值为正;如果不设置夏令时,则为零;如果该信息不可用,则该值为负。
    调用 ctime(t) 相当于 asctime(localtime(t)) 。它将日历时间 t 转换为以 null 结尾的字符串形式
    “Wed Jun 30 21:49:08 1993\n”
    星期几的缩写是 “Sun”,“Mon”,“Tue”,“Wed”,“Thu”,“Fri” 和 “Sat”。月份的缩写为"Jan",“Feb”,“Mar”,“Apr”,“May”,“Jun”,“Jul”,“Aug”,“Sep”,“Oct”,“Nov” 和 “Dec”。返回值指向静态分配的字符串,该字符串可能会被后续调用的任何日期和时间函数覆盖。该函数还使用有关当前时区的信息来设置外部变量tzname,timezone和daylight (请参阅tzset(3))。可重入版本 ctime_r() 的功能相同,但会将字符串存储在用户提供的缓冲区中,该缓冲区应至少有26个字节的空间。它不需要设置 tzname,timezone 和 daylight。
    gmtime() 函数将日历时间 timep 转换为分解时间表示,以UTC表示。当年份不是整数时,它可能返回NULL。返回值指向静态分配的结构,该结构可能会被后续任何日期和时间函数的调用覆盖。gmtime_r() 函数的作用与此相同,但将数据存储在用户提供的结构中。
    localtime() 函数将日历时间转换为分解时间表示,表示相对于用户指定的时区。该函数的作用与调用 tzset(3) 类似,并将外部变量 tzname 设置为当前时区的相关信息,timezone 设置为 UTC 和本地标准时间之间的差(以秒为单位),如果夏令时规则在一年中的某个部分适用,则将 daylight 改为非零值。返回值指向静态分配的结构,该结构可能会被对任何日期和时间函数的后续调用覆盖。localtime_r() 函数也执行相同的操作,但将数据存储在用户提供的结构中。它不需要设置 tzname,timezone 和 daylight。
    asctime() 函数将分解时间值 tm 转换为以null结尾的字符串,与ctime() 格式相同。返回值指向静态分配的字符串,该字符串可能会被后续调用的任何日期和时间函数覆盖。asctime_r() 函数也会执行相同的操作,但是会将字符串存储在用户提供的缓冲区中,该缓冲区至少应该有26个字节的空间。
    mktime() 函数将分解时间结构(表示为本地时间)转换为日历时间表示形式。该函数忽略调用者在 tm_wday 和 tm_yday 字段中提供的值。在 tm_isdst 字段中指定的值告知 mktime() 函数,夏令时(DST)在 tm 结构中提供的时间是否有效:正值表示DST有效;零表示DST无效;负值意味着 mktime() 应该(使用时区信息和系统数据库)尝试确定DST是否在指定的时间生效。
    mktime() 函数以如下方式修改 tm 结构的字段:tm_wday和tm_yday设置为根据其他字段的内容确定的值;如果结构成员超出其有效间隔,则将其正常化(例如,将10月40日改为11月9日);tm_isdst分别设置为正值或0,以指示DST在指定时间是否有效。调用 mktime() 还将使用当前时区的信息设置外部变量 tzname 。如果指定的分解时间不能表示为日历时间(从Epoch开始的秒数),mktime() 将返回 -1,并且不会更改分解时间结构的成员。

返回值

    这些函数中的每一个都返回所描述的值,如果检测到错误,则返回NULL(对于mktime(),返回 -1)。

注意

    四个函数asctime()、ctime()、gmtime() 和 localtime() 返回指向静态数据的指针,因此不是线程安全的。
    在许多实现中,包括glibc,tm_mday 中的0被解释为上个月的最后一天。

示例

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

int main()
{
    
    
        time_t curtime;
        time(&curtime);
        printf("current time = %s", ctime(&curtime));
        return(0);
}

参考文档

https://linux.die.net/man/3/ctime
https://www.tutorialspoint.com/c_standard_library/c_function_ctime.htm
https://zh.cppreference.com/w/cpp/header/ctime

猜你喜欢

转载自blog.csdn.net/zsx0728/article/details/111786400