C语言获取系统时间
在学习I/O文件操作时遇到了关于时间函数的问题,在这里进行记录,有误之处
请指出!第一次发博客,多多担待嘿嘿
- 包含头文件 : #include <time.h>
- 创建 time_t类型 变量 ,此类型为types.h中定义的long int 别名
- 创建 struct tm 结构体指针 ,该结构体包含时间信息,例如:秒 分 时 日 月 年….
struct tm
{
int tm_sec;
int tm_min;
int tm_hour;
int tm_mday;
int tm_mon;
int tm_year;
int tm_wday;
int tm_yday;
int tm_isdst;
# ifdef __USE_MISC
long int tm_gmtoff;
const char *tm_zone;
# else
long int __tm_gmtoff;
const char *__tm_zone;
# endif
};
- 通过time函数获取linux(…)系统时间,单位为秒,将刚刚定义的time_t类型的变量取地址作为参数
time_t timep;
struct tm *p;
time(&timep);
- 此时timep已经拥有了从1970年1月1日开始的秒值,取其地址作为参数调用gmtime()函数 此函数将秒值转换为结构体成员值
p = gmtime(&timep);
- 此时的时间可通过调用tm结构体成员来显示查看 注意:这里时间是UTC时间 ,未将其转换为当地时间 故这里将其+8
注意:这里的星期 数组 其元素位置必须遵守tm结构体中p->tm_wday值 其0代表周日 1代表周一
char *wday[]={"周日", "周一", "周二", "周三", "周四", "周五", "周六"};
printf("%d年 %d月 %d日 %s %d:%d:%d\n",(1900+p->tm_year),
(1+p->tm_mon), p->tm_mday,wday[p->tm_wday], p->tm_hour+8, p->tm_min, p->tm_sec);
#include<stdio.h>
#include<time.h>
int main(int argc, char const *argv[])
{
time_t timep;
struct tm *p;
time(&timep);
p=gmtime(&timep);
char *wday[]={"周日", "周一", "周二", "周三", "周四", "周五", "周六"};
printf("%d年 %d月 %d日 %s %d:%d:%d\n",(1900+p->tm_year),
(1+p->tm_mon), p->tm_mday,wday[p->tm_wday], p->tm_hour+8, p->tm_min, p->tm_sec);
return 0;
}
输出:2021年 5月 15日 周六 10:18:58
- 练习:
1.c语言获取系统时间在文件IO中经常用到,那么接下来编写一个程序,使之每隔1秒保存一次当前系统的时间和行号,保存到一个普通文件 time.txt中。
要求在按 ctrl+c 终止该程序后,文件 time.txt 能正常保存到所有的信息,并且在重启程序能继续保存时间,
并且保持行号连续
#include<stdio.h>
#include<stdlib.h>
#include<string.h>
#include<time.h>
#include<unistd.h>
int main(int argc, char const *argv[])
{
char TimeArr[56]={0};
int line=0;
FILE *localFile=fopen("time.txt","a+");
while(1){
int ret=fscanf(localFile,"%d%[^\n]",&line,TimeArr);
if(ret != 2)
{
break;
}
}
printf("开始写入!!!\n");
while(1){
char *wday[]={"周日", "周一", "周二", "周三", "周四", "周五", "周六"};
time_t timep;
struct tm *p;
time(&timep);
p = gmtime(&timep);
sprintf(TimeArr,"%d年 %d月 %d日 %s %d:%d:%d\n",(1900+p->tm_year),
(1+p->tm_mon), p->tm_mday,wday[p->tm_wday], p->tm_hour+8, p->tm_min, p->tm_sec);
fprintf(localFile,"%d\t%s",line+1,TimeArr);
fflush(localFile);
sleep(1);
line++;
}
fclose(localFile);
return 0;
}
1 2021年 5月 15日 周六 10:46:52
2 2021年 5月 15日 周六 10:46:53
3 2021年 5月 15日 周六 10:46:54
4 2021年 5月 15日 周六 10:46:55
5 2021年 5月 15日 周六 10:46:56
6 2021年 5月 15日 周六 10:46:57
7 2021年 5月 15日 周六 10:46:58
8 2021年 5月 15日 周六 10:46:59
9 2021年 5月 15日 周六 10:47:0
10 2021年 5月 15日 周六 10:47:2
11 2021年 5月 15日 周六 10:47:3
12 2021年 5月 15日 周六 10:47:4
13 2021年 5月 15日 周六 10:47:5
14 2021年 5月 15日 周六 10:47:6
15 2021年 5月 15日 周六 10:47:7