c语言标准库详解(十四):时间函数time.h

c语言标准库详解(十四):时间函数<time.h>

概述

头文件<time.h>中声明了一些处理日期与时间的类型和函数。其中的一些函数用于处理当地时间,因为时区等原因,当地时间与日历时间可能不相同。clock_t和time_t是两个表示时间的算数类型,struct tm用于保存日历时间的各个构成部分。

struct tm

结构tm中各成员的用途及取值范围如下所示:

成员名称 涵义
int tm_sec; 从当前分钟开始经过的秒数(0, 61)
int tm_min; 从当前小时开始经过的分钟数(0, 59)
int tm_hour; 从午夜开始经过的小时数(0, 23)
int tm_mday; 当月的天数(1, 31)
int tm_mon; 从 1 月起经过的月数(0, 11)
int tm_year; 从 1900 年起经过的年数
int tm_wday; 从星期天起经过的天数(0, 6)
int tm_yday; 从 1 月 1 日起经过的天数(0, 365)
int tm_isdst; 夏令时标记 (巨坑)

使用夏令时,tm_isdst的值为正,否则为0.如果该信息无效,则其值为负。

clock()函数

clock_t clock(void)

clock 函数返回程序开始执行后占用的处理器时间。如果无法获取处理器时间,则返回值为-1。clock()/CLOCKS_PER_SEC 是以秒为单位表示的时间。

time()函数

time_t time(time_t *tp)

time函数返回当前日历时间。如果无法获取日历时间,则返回值为-1。 如果tp不是NULL, 则同时将返回值赋给*tp。

difftime()函数

double difftime(time_t time2, time_t time1)

difftime 函数返回 time2-time1 的值(以秒为单位)。

mktime()函数

time_t mktime(struct tm *tp)

mktime 函数将结构*tp 中的当地时间转换为与 time 表示方式相同的日历时间,结构中各成员的值位于上面所示范围之内。mktime 函数返回转换后得到的日历时间;如果该时间不能表示,则返回-1。

下面 4 个函数返回指向可被其它调用覆盖的静态对象的指针。

asctime()
char *asctime(const struct tm *tp)

asctime函数将结构*tp中的时间转换为下列所示的字符串形式:
Sun Jan 3 15:14:13 1988\n\0

ctime()
char *ctime(const time_t *tp)

ctime 函数将结构*tp 中的日历时间转换为当地时间。它等价于下列函数调用:

asctime(localtime(tp))
gmtime()
struct tm *gmtime(const time_t *tp)

gmtime 函数将*tp 中的日历时间转换为协调世界时(UTC)。如果无法获取 UTC,则该函数返回 NULL。函数名字 gmtime 有一定的历史意义。

localtime()
struct tm *localtime(const time_t *tp)

localtime 函数将结构*tp 中的日历时间转换为当地时间。

strftime()函数

size_t strftime(char *s, size_t smax, const char *fmt, const struct tm *tp)

strftime 函数根据 fmt 中的格式把结构*tp 中的日期与时间信息转换为指定的格式,并存储到 s 中,其中 fmt 类似于 printf 函数中的格式说明。普通字符(包括终结符’\0’)将复制到 s 中。每个%c 将按照下面描述的格式替换为与本地环境相适应的值。最多 smax 个字符写到 s 中。strftime 函数返回实际写到 s 中的字符数(不包括字符’\0’);如果字符数多于smax,该函数将返回值 0。
fmt 的转换说明及其含义如下所示:

模式 涵义
%a 一星期中各天的缩写名
%A 一星期中各天的全名
%b 缩写的月份名
%B 月份全名
%c 当地时间和日期表示
%d 一个月中的某一天(01-31)
%H 小时(24 小时表示)( 00-23)
%I 小时(12 小时表示)( 01-12)
%j 一年中的各天(001—366)
%m 月份(01-12)
%M 分钟(00-59)
%p 与 AM 与 PM 相应的当地时间等价表示方法
%S 秒(00-61)
%U 一年中的星期序号(00-53,将星期日看作是每周的第一天)
%w 一周中的各天(0-6,星期日为 0)
%W 一年中的星期序号(00-53,将星期一看作是每周的第一天)
%x 当地日期表示 %X 当地时间表示
%y 不带世纪数目的年份(00-99)
%Y 带世纪数目的年份
%Z 时区名(如果有的话)
%% %本身

示例

time()函数

代码:

#include <stdio.h>
#include <time.h>
int main ()
{
   
  time_t seconds;
  seconds = time(NULL);
  printf("自 1970-01-01 起的小时数 = %ld\n", seconds/3600); 
  return(0);
}

输出:

PS G:\CSAPP
  • 16
    点赞
  • 161
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值