C语言时间戳处理完全解析:掌握高效日期和时间操作的关键
创作时间:
作者:
@小白创作中心
C语言时间戳处理完全解析:掌握高效日期和时间操作的关键
引用
CSDN
1.
https://m.blog.csdn.net/suifengme/article/details/141034641
时间戳是C语言中用于表示时间的重要概念,它以从1970年1月1日午夜开始经过的秒数为基准。掌握时间戳处理对于记录事件时间、计算时间间隔等场景非常关键。本文将通过多个实用示例,深入讲解C语言中时间戳的获取、格式化、转换、比较以及持续时间计算等核心操作。
基本的时间戳获取
使用time函数可以获取当前时间的时间戳。
#include <stdio.h>
#include <time.h>
int main() {
time_t rawtime;
struct tm *timeinfo;
time(&rawtime); // 获取当前时间的时间戳
timeinfo = localtime(&rawtime); // 转换为本地时间
printf("Current time: %s", asctime(timeinfo)); // 打印当前时间
return 0;
}
输出:
Current time: Thu Aug 8 15:24:01 2024
解释:
time(&rawtime): 获取当前时间的时间戳。localtime(&rawtime): 将时间戳转换为本地时间。asctime(timeinfo): 将时间格式化为字符串。
时间戳的格式化
使用strftime函数可以将时间戳格式化为指定的日期时间字符串。
#include <stdio.h>
#include <time.h>
int main() {
time_t rawtime;
struct tm *timeinfo;
char buffer[30];
time(&rawtime);
timeinfo = localtime(&rawtime);
strftime(buffer, sizeof(buffer), "%Y-%m-%d %H:%M:%S", timeinfo);
printf("Formatted date and time: %s\n", buffer);
return 0;
}
输出:
Formatted date and time: 2024-08-08 15:24:01
解释:
strftime(buffer, sizeof(buffer), "%Y-%m-%d %H:%M:%S", timeinfo): 格式化时间为指定格式。
时间戳与日期转换
使用mktime函数可以将日期结构体转换为时间戳。
#include <stdio.h>
#include <time.h>
int main() {
struct tm newTime = {0};
time_t rawTime;
// 设置日期
newTime.tm_year = 2024 - 1900; // 年份减去 1900
newTime.tm_mon = 8 - 1; // 月份减去 1
newTime.tm_mday = 8; // 日
newTime.tm_hour = 12; // 小时
newTime.tm_min = 0; // 分钟
newTime.tm_sec = 0; // 秒
mktime(&newTime); // 更新tm_isdst字段
rawTime = mktime(&newTime); // 将struct tm转换为time_t
printf("Time value: %ld\n", (long)rawTime);
printf("Date and time: %s", asctime(localtime(&rawTime)));
return 0;
}
输出:
Time value: 1691539200
Date and time: Thu Aug 8 12:00:00 2024
解释:
mktime(&newTime): 将struct tm转换为time_t。asctime(localtime(&rawTime)): 将时间格式化为字符串。
时间戳的比较
可以使用时间戳进行时间的比较。
#include <stdio.h>
#include <time.h>
int main() {
time_t startTime, endTime;
struct tm start, end;
// 设置开始时间
start.tm_year = 2024 - 1900;
start.tm_mon = 8 - 1;
start.tm_mday = 8;
start.tm_hour = 12;
start.tm_min = 0;
start.tm_sec = 0;
mktime(&start);
startTime = mktime(&start);
// 设置结束时间
end.tm_year = 2024 - 1900;
end.tm_mon = 8 - 1;
end.tm_mday = 8;
end.tm_hour = 13;
end.tm_min = 0;
end.tm_sec = 0;
mktime(&end);
endTime = mktime(&end);
if (startTime < endTime) {
printf("Start time is before end time.\n");
} else if (startTime > endTime) {
printf("Start time is after end time.\n");
} else {
printf("Start time is equal to end time.\n");
}
return 0;
}
输出:
Start time is before end time.
解释:
- 比较
startTime和endTime。
时间戳与持续时间
使用difftime函数可以计算两个时间戳之间的持续时间。
#include <stdio.h>
#include <time.h>
int main() {
time_t startTime, endTime;
struct tm start, end;
// 设置开始时间
start.tm_year = 2024 - 1900;
start.tm_mon = 8 - 1;
start.tm_mday = 8;
start.tm_hour = 12;
start.tm_min = 0;
start.tm_sec = 0;
mktime(&start);
startTime = mktime(&start);
// 设置结束时间
end.tm_year = 2024 - 1900;
end.tm_mon = 8 - 1;
end.tm_mday = 8;
end.tm_hour = 13;
end.tm_min = 0;
end.tm_sec = 0;
mktime(&end);
endTime = mktime(&end);
double duration = difftime(endTime, startTime); // 计算持续时间
printf("Duration: %.0f seconds\n", duration);
return 0;
}
输出:
Duration: 3600 seconds
解释:
difftime(endTime, startTime): 计算endTime和startTime之间的时间差。
结论
时间戳处理是C语言编程中的一个重要组成部分,涉及到获取当前时间、格式化日期和时间、计算时间差等多个方面。通过上述示例,你应该已经了解了如何在C语言中有效地处理时间戳。这种能力对于编写涉及日期和时间的程序非常有帮助。
热门推荐
上海至喀什骑行装备:318、219国道40项必备清单
企业降本增效四大供应链策略:采购、生产、计划、物流全方位优化
王者荣耀S32全肉貂蝉出装 貂蝉出装解读
王者荣耀貂蝉玩法攻略:技能释放与出装推荐
凤凰古城:湖南旅发大会的璀璨明珠
G219国道:中国最长公路穿越四省区,串联世界级景观
燃气安全使用指南:从泄漏检测到应急处理
综合治疗显成效,心理疗法成神经系统紊乱治疗关键
三指操作灵敏度优化指南:从游戏到日常的全方位提升
足球运动中的手指灵活性:从训练到实战
从燕麦到深海鱼:明星同款饮食调理方案缓解植物神经紊乱
XEN1101临床试验结果喜人:癫痫发作减少52.8%,安全性良好
郭彦甫和林如琦都在做!这三个瑜伽动作缓解颈椎病
慢性咽炎的常见病因有哪些?该如何调理?中医这3招,让咽喉舒服
何达教你办公室防颈椎病秘籍
心理干预助力颈椎病康复
如何避免“低头族”颈椎病?
丁禹兮主演的10部剧,火了3部,扑了3部,关键要看女主是谁!
巴厘岛攻略:免签直飞,干季最佳,8大景点详解
人民币汇率波动,套期保值成外贸企业避险首选
人民币汇率波动超4%,企业风险管理策略全解析
银手镯、石榴石与翡翠:这样搭配更显气质
微信安全设置全攻略:5大领域帮你守护账号安全
微信好友莫名增加的三大原因及应对方案
微信朋友圈高效管理指南:功能、工具、技巧一文掌握
微信隐私这样设,双十一购物更安心
从12345到12328:广州八大民生服务热线使用指南
从新闻服务到食品安全调查:12304热线的多重使命
Qt连接MySQL数据库:从驱动安装到代码实现的完整指南
藏医药浴法列入非遗:藏族传统疗法的传承与创新