C语言:设计程序,获取当前系统时间,并把时间转换为特定格式写入到文本中
C语言:设计程序,获取当前系统时间,并把时间转换为特定格式写入到文本中
问题:设计程序,获取当前系统时间,并把时间转换为特定格式“YY年mm月dd日 tt:mm:ss“,并每隔1s写入到本地磁盘中一个叫做log.txt的文本中,如果文本不存在则创建
下面是程序代码:
#include <stdio.h>
#include <time.h>
#include <unistd.h>
#define LOG_FILE "log.txt"
int main() {
FILE *fp;
time_t rawtime;
struct tm *timeinfo;
char time_str[20];
// 循环持续记录时间
while (1) {
// 获取当前时间
time(&rawtime);
// 将时间转换为本地时间
timeinfo = localtime(&rawtime);
// 格式化时间字符串
strftime(time_str, sizeof(time_str), "%y年%m月%d日 %H:%M:%S", timeinfo);
// 打开文件以追加模式写入
fp = fopen(LOG_FILE, "a");
if (fp == NULL) {
perror("无法打开文件");
return 1;
}
// 将时间字符串写入文件
fprintf(fp, "%s\n", time_str);
// 关闭文件
fclose(fp);
// 等待 1 秒
sleep(1);
}
return 0;
}
知识点分析
1. 头文件包含
#include <stdio.h>
#include <time.h>
#include <unistd.h>
stdio.h:标准输入输出库,提供了文件操作(如fopen、fprintf、fclose)和标准输入输出(如printf)等函数。time.h:时间处理库,用于获取和处理系统时间,包含time、localtime、strftime等函数。unistd.h:Unix 标准库,提供了与操作系统交互的函数,这里使用了sleep函数。
2. 宏定义
#define LOG_FILE "log.txt"
使用 #define 定义一个宏 LOG_FILE,将其值设为 "log.txt",方便后续代码中引用日志文件的名称。如果需要更改文件名,只需修改这一处即可。
3. 时间处理
time_t rawtime;
struct tm *timeinfo;
time(&rawtime);
timeinfo = localtime(&rawtime);
time_t:是一种用于表示时间的类型,通常是一个整数,存储从某个固定时间点(如 1970 年 1 月 1 日)到现在的秒数。time函数:获取当前系统时间,将结果存储在rawtime变量中。struct tm:是一个结构体,用于存储分解后的时间信息,如年、月、日、时、分、秒等。localtime函数:将time_t类型的时间转换为本地时间,返回一个指向struct tm结构体的指针。
4. 时间格式化
char time_str[30];
strftime(time_str, sizeof(time_str), "%y年%m月%d日 %H:%M:%S", timeinfo);
strftime函数:用于将struct tm结构体中的时间信息按照指定的格式转换为字符串。%y:表示年份的后两位。%m:表示月份(01 - 12)。%d:表示日期(01 - 31)。%H:表示小时(00 - 23)。%M:表示分钟(00 - 59)。%S:表示秒(00 - 59)。
5. 文件操作
FILE *fp;
fp = fopen(LOG_FILE, "a");
if (fp == NULL) {
perror("无法打开文件");
return 1;
}
fprintf(fp, "%s\n", time_str);
fclose(fp);
FILE:是一个文件指针类型,用于表示一个打开的文件。fopen函数:以指定的模式(这里是"a",表示追加模式)打开文件,如果文件不存在则创建它。如果打开失败,返回NULL。perror函数:用于输出错误信息,方便调试。fprintf函数:将格式化的字符串写入文件。fclose函数:关闭打开的文件,释放相关资源。
6. 循环和延时
while (1) {
// ...
sleep(1);
}
while (1):创建一个无限循环,使程序持续运行。sleep函数:使程序暂停执行指定的秒数,这里是暂停 1 秒。

浙公网安备 33010602011771号