概述
文章目录
- 一. 别名
- 二. 相关的库函数
- 2.1 time 库函数
- 2.2 localtime库函数
- 2.3 mktime 库函数
- 2.4 代码演示
- 三. 程序睡眠
- 四. 计时器
- 五. 扩展函数库
在实际开发中, 对日期和时间的处理操作非常多, 本文操作系统的时区配置为中国北京或上海时间.
在
root
用户中执行, 修改命令如下:
[root@bi hello]# cp /usr/share/zoneinfo/Asia/Shanghai /etc/localtime
[root@bi hello]# date // 查看当前时间
[root@bi hello]# date -s 2021/05/13 // 修改当前日期
[root@bi hello]# date -s 14:28 // 修改当前时间
一. 别名
time_t
是长整型 在<time.h>
头文件中有定义
typedef lont time_t;
二. 相关的库函数
2.1 time 库函数
用途是返回一个值, 也就是从1970-1-1 00:00:00秒到现在秒数
time 函数是C语言标准库中的函数,在<time.h>
申明
有两种调用 方法, 代码中有演示
2.2 localtime库函数
功能: 把time_t表示的值转换为struct tm表示的时间.
返回值: 是个结构体, 解释如下
struct tm {
int tm_sec; //秒数, 取值[0-59]
int tm_min; //分钟数, 取值[0-59]
int tm_hour; //小时数, 取值[0-23]
int tm_mday; // 一个月中的天, 取值[1, 31]
int tm_mon; //月份(0代表1月, 以此类推),取值[0,11]
int tm_year; // 年份, 其值等于实际年份减少1900;
int tm_wday; //星期, 取值[0-6], 0代表星期天, 1代表期一, 类推
int tm_yday; // 从每年1月1日起,开始的天数, 取值区间[0, 365], 0代表1月1日, 1代表1月2日, 以此类推
int tm_isdst; //夏令时, 意义不大,我们一般不用.
}
2.3 mktime 库函数
功能: 与localtime 函数相反, 把stuct tm的函数转为time_t长整型的
2.4 代码演示
#include <stdio.h>
#include <string.h>
#include <stdlib.h>
#include <time.h>
int main(){
time_t tnow1, tnow2;
tnow1=time(0); // 第一种方法
printf("=%ld=n", tnow1);
time(&tnow2); // 第二种方法
printf("=%ld=n", tnow2);
// 演示 localtime
struct tm *sttm;
sttm=localtime(&tnow1);
printf("%d-%d-%d %d:%d:%d 今天是周%d, 一年中的第%d天n", sttm->tm_year,sttm->tm_mon, sttm->tm_mday, sttm->tm_hour, sttm->tm_min,sttm->tm_sec,sttm->tm_wday, sttm->tm_yday);
char date[11];
char time[9];
char datetime[21];
sprintf(date, "%04u-%02u-%02u", sttm->tm_year+1900,sttm->tm_mon+1, sttm->tm_mday);
sprintf(time, "%02u:%02u:%02u", sttm->tm_hour, sttm->tm_min,sttm->tm_sec);
sprintf(datetime, "%s %s", date, time);
printf("=%s=n", datetime);
// 演示 mktime
memset(sttm, 0, sizeof(sttm));
sttm->tm_year=2021-1900;
sttm->tm_mon=5-1;
sttm->tm_mday=13;
sttm->tm_hour=15;
sttm->tm_min=42;
sttm->tm_sec=0;
sttm->tm_isdst=0;
printf("%ldn",mktime(sttm));
}
三. 程序睡眠
sleep(1) 休眠1秒
usleep(1,000,000) 休眠1秒, 1秒=1000000微秒.
四. 计时器
- timeval 结构体
struct timeval {
long tv_sec; // 当前秒数
long tv_usec; // 当前秒的微秒数
} - timezone 结构体, 时区,实际开发中不常用.
struct timezone {
int tz_minuteswest; // 和greenwich时间差了多少分钟;
int tz_dattime; // 夏令时还是冬令时
} - gettimeofday 库函数
获得当前的秒和微秒的时间,秒是指从19701-1-1 到现在的秒数, 微秒是指当前已经逝去的微秒数.可用于程序的计时.
#include <stdio.h>
#include <string.h>
#include <stdlib.h>
#include <time.h>
#include <sys/time.h>
int main(){
struct timeval begin, end;
gettimeofday(&begin, 0);
printf("=begin time, secs=%d, usec=%d=n", begin.tv_sec, begin.tv_usec);
sleep(1);
gettimeofday(&end, 0);
printf("=end time, secs=%d, usec=%d=n", end.tv_sec, end.tv_usec);
printf("两次间隔是: %d %d", end.tv_sec-begin.tv_sec, end.tv_usec-beging.tv_usec);
}
可以发现程序的运行也是需要用时间的.
注意事项: time.h 是ISO C99标准日期头文件, sys/time.h是linux系统的日期头文件,也就是这三个结构体或库函数是windows平台上无法使用.
应用经验:
时间偏移: 时间字符串转为时间戳, 加上秒数, 比如10分钟,就是10*60, 再将时间戳转为时间字符串.
五. 扩展函数库
#include <stdio.h>
#include <string.h>
#include <stdlib.h>
#include <time.h>
#include <sys/time.h>
// 把整数的时间, 转为字符串格式的时间, 'YYYY-MM-SS HH:mm:ss'
int timetostr(const time_t tt, char *strtime);
// 把时间格式的字符串,转为时间戳输出
int strtotime(const *strime, time_t tt);
int main(){
char strlocaltime[21];
memset(strlocaltime, 0, sizeof(strlocaltime));
time_t tt;
tt=time(0);
timetostr(tt, strlocaltime);
printf("%sn", strlocaltime);
}
// 把时间格式的字符串,转为时间戳输出
int strtotime(const *strtime, time_t tt){
struct tm sttm;
// 2021-05-13 17:40:30
char strtmp[11];
//拆分 字符串中的 年
memset(strtmp,0, sizeof(strtmp));
strncpy(strtmp, strtime, 4);
sttm.tm_year=atoi(strtmp)-1900;
//拆分 字符串中的 月
memset(strtmp,0, sizeof(strtmp));
strncpy(strtmp, strtime+5,2);
sttm.tm_mon=atoi(strtmp)-1;
//拆分 字符串中的 日
memset(strtmp,0, sizeof(strtmp));
strncpy(strtmp, strtime+8,2);
sttm.tm_mday=atoi(strtmp);
//拆分 字符串中的 时
memset(strtmp,0, sizeof(strtmp));
strncpy(strtmp, strtime+11,2);
sttm.tm_hour=atoi(strtmp);
//拆分 字符串中的 分
memset(strtmp,0, sizeof(strtmp));
strncpy(strtmp, strtime+14,2);
sttm.tm_min=atoi(strtmp);
//拆分 字符串中的 日
memset(strtmp,0, sizeof(strtmp));
strncpy(strtmp, strtime+17,2);
sttm.tm_sec=atoi(strtmp);
tt=mktime(&sttm);
return tt;
}
// 把整数的时间, 转为字符串格式的时间, 'YYYY-MM-SS HH:mm:ss'
int timetostr(const time_t tt, char *strtime){
struct tm *sttm;
sttm=localtime(&tt);
if (sttm ==0) return -1;
char date[11];
char time[9];
sprintf(date, "%04u-%02u-%02u", sttm->tm_year+1900,sttm->tm_mon+1, sttm->tm_mday);
sprintf(time, "%02u:%02u:%02u", sttm->tm_hour, sttm->tm_min,sttm->tm_sec);
sprintf(strtime, "%s %s", date, time);
return 0;
}
最后
以上就是害羞硬币为你收集整理的初学C语言之时间操作一. 别名二. 相关的库函数三. 程序睡眠四. 计时器五. 扩展函数库的全部内容,希望文章能够帮你解决初学C语言之时间操作一. 别名二. 相关的库函数三. 程序睡眠四. 计时器五. 扩展函数库所遇到的程序开发问题。
如果觉得靠谱客网站的内容还不错,欢迎将靠谱客网站推荐给程序员好友。
发表评论 取消回复