Linux下用C获取当前时间
发布时间 - 2026-01-10 22:46:03 点击率:次Linux下用C获取当前时间,具体如下:

代码(可以把clock_gettime换成time(NULL))
void getNowTime()
{
timespec time;
clock_gettime(CLOCK_REALTIME, &time); //获取相对于1970到现在的秒数
tm nowTime;
localtime_r(&time.tv_sec, &nowtime);
char current[1024];
sprintf(current, "%04d%02d%02d%02d:%02d:%02d", nowTime.tm_year + 1900, nowTime.tm_mon, nowTime.tm_mday,
nowTime.tm_hour, nowTime.tm_min, nowTime.tm_sec);
}
分析:
clock_gettime()
函数"clock_gettime"是基于Linux C语言的时间函数,他可以用于计算精度和纳秒。
语法:
#include<time.h> int clock_gettime(clockid_t clk_id,struct timespec *tp);
参数:
clk_id : 检索和设置的clk_id指定的时钟时间。
CLOCK_REALTIME:系统实时时间,随系统实时时间改变而改变,即从UTC1970-1-1 0:0:0开始计时,中间时刻如果系统时间被用户改成其他,则对应的时间相应改变
- CLOCK_MONOTONIC:从系统启动这一刻起开始计时,不受系统时间被用户改变的影响
- CLOCK_PROCESS_CPUTIME_ID:本进程到当前代码系统CPU花费的时间
- CLOCK_THREAD_CPUTIME_ID:本线程到当前代码系统CPU花费的时间
struct timespec
{
time_t tv_sec; /* 秒*/
long tv_nsec; /* 纳秒*/
};
localtime()
localtime是 把从1970-1-1零点零分到当前时间系统所偏移的秒数时间转换为本地时间.
语法
说明:此函数获得的tm结构体的时间是日历时间。
用 法: struct tm *localtime(const time_t *clock);
返回值:返回指向tm 结构体的指针.tm结构体是time.h中定义的用于分别存储时间的各个量(年月日等)的结构体.
例1:
#include <stdio.h>
#include <stddef.h>
#include <time.h>
int main(void)
{
time_t timer;//time_t就是long int 类型
struct tm *tblock;
timer = time(NULL);
tblock = localtime(&timer);
printf("Local time is: %s\n", asctime(tblock));
return 0;
}
执行结果:
Local time is: Mon Feb 16 11:29:26 2009
例2:
上面的例子用了asctime函数,下面这个例子不使用这个函数一样能获取系统当前时间。需要注意的是年份加上1900,月份加上1。
#include<time.h>
#include<stdio.h>
int main()
{
struct tm *t;
time_t tt;
time(&tt);
t = localtime(&tt);
printf("%4d年%02d月%02d日 %02d:%02d:%02d\n", t->tm_year + 1900, t->tm_mon + 1, t->tm_mday, t->tm_hour, t->tm_min, t->tm_sec);
return 0;
}
localtime()与localtime_r()的区别
localtime():
#include <cstdlib>
#include <iostream>
#include <time.h>
#include <stdio.h>
using namespace std;
int main(int argc, char *argv[])
{
time_t tNow =time(NULL);
time_t tEnd = tNow + 1800;
//注意下面两行的区别
struct tm* ptm = localtime(&tNow);
struct tm* ptmEnd = localtime(&tEnd);
char szTmp[50] = {0};
strftime(szTmp,50,"%H:%M:%S",ptm);
char szEnd[50] = {0};
strftime(szEnd,50,"%H:%M:%S",ptmEnd);
printf("%s /n",szTmp);
printf("%s /n",szEnd);
system("PAUSE");
return EXIT_SUCCESS;
}
最后出来的结果是:
21:18:39
21:18:39
和最初想法不一致。
查阅localtime的文档,发现这段话:
This structure is statically allocated and shared by the functions gmtime and localtime. Each time either one of these functions is called the content of this structure is overwritten.
也就是说每次只能同时使用localtime()函数一次,要不就会被重写!
The localtime() function need not be reentrant. A function that is not required to be reentrant is not required to be thread-safe.
因此localtime()不是可重入的。同时libc里提供了一个可重入版的函数localtime_r();
Unlike localtime(), the reentrant version is not required to set tzname。
修改程序:(localtime_r())
#include <cstdlib>
#include <iostream>
#include <time.h>
#include <stdio.h>
using namespace std;
int main(int argc, char *argv[])
{
time_t tNow =time(NULL);
time_t tEnd = tNow + 1800;
//在这里修改程序
//struct tm* ptm = localtime(&tNow);
//struct tm* ptmEnd = localtime(&tEnd);
struct tm ptm = { 0 };
struct tm ptmEnd = { 0 };
localtime_r(&tNow, &ptm);
localtime_r(&tEnd, &ptmEnd);
char szTmp[50] = {0};
strftime(szTmp,50,"%H:%M:%S",&ptm);
char szEnd[50] = {0};
strftime(szEnd,50,"%H:%M:%S",&ptmEnd);
printf("%s /n",szTmp);
printf("%s /n",szEnd);
system("PAUSE");
return EXIT_SUCCESS;
}
最后出来的结果是:
10:29:06
10:59:06
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代表一月) - 取值区间为[0,11] */
int tm_year; /* 年份,其值等于实际年份减去1900 */
int tm_wday; /* 星期 – 取值区间为[0,6],其中0代表星期天,1代表星期一 */
int tm_yday; /* 从每年1月1日开始的天数– 取值区间[0,365],其中0代表1月1日 */
int tm_isdst; /* 夏令时标识符,夏令时tm_isdst为正;不实行夏令时tm_isdst为0 */
};
time 函数
返回:1970-1-1, 00:00:00以来经过的秒数
原型: time_t time(time_t *calptr)
结果可以通过返回值,也可以通过参数得到,见实例
头文件 <time.h>
返回值:
成功:秒数,从1970-1-1,00:00:00 可以当成整型输出或用于其它函数
失败:-1
例:
time_t now;
time(&now);// 等同于now = time(NULL)
printf("now time is %d\n", now);
以上就是本文的全部内容,希望对大家的学习有所帮助,也希望大家多多支持。
# linux取当前系统时间
# linux
# 当前系统时间
# c
# 获取当前时间
# Linux 下载安装VSCode 使用编程输出当前时间的方法
# linux下用time(NULL)函数和localtime()获取当前时间的方法
# linux下获取当前时间的相关函数
# 返回值
# 可以通过
# 的是
# 就会
# 在这里
# 结果是
# 用了
# 不受
# 重写
# 月中
# 相对于
# 转换为
# 零点
# 需要注意
# 使用这个
# 大家多多
# 两行
# 星期天
# 这段话
# 则对
相关栏目:
【
网站优化151355 】
【
网络推广146373 】
【
网络技术251813 】
【
AI营销90571 】
相关推荐:
🚀拖拽式CMS建站能否实现高效与个性化并存?
Laravel如何实现全文搜索功能?(Scout和Algolia示例)
EditPlus中的正则表达式 实战(2)
JS中对数组元素进行增删改移的方法总结
作用域操作符会触发自动加载吗_php类自动加载机制与::调用【教程】
Laravel API路由如何设计_Laravel构建RESTful API的路由最佳实践
如何快速搭建高效简练网站?
Claude怎样写结构化提示词_Claude结构化提示词写法【教程】
魔方云NAT建站如何实现端口转发?
Laravel怎么使用Session存储数据_Laravel会话管理与自定义驱动配置【详解】
如何破解联通资金短缺导致的基站建设难题?
百度浏览器ai对话怎么关 百度浏览器ai聊天窗口隐藏
如何在香港服务器上快速搭建免备案网站?
html5如何设置样式_HTML5样式设置方法与CSS应用技巧【教程】
Win11怎么恢复误删照片_Win11数据恢复工具使用【推荐】
高配服务器限时抢购:企业级配置与回收服务一站式优惠方案
Laravel如何使用集合(Collections)进行数据处理_Laravel Collection常用方法与技巧
标准网站视频模板制作软件,现在有哪个网站的视频编辑素材最齐全的,背景音乐、音效等?
HTML5空格和nbsp有啥关系_nbsp的作用及使用场景【说明】
如何在宝塔面板创建新站点?
Python3.6正式版新特性预览
Laravel如何自定义分页视图?(Pagination示例)
如何用好域名打造高点击率的自主建站?
Java Adapter 适配器模式(类适配器,对象适配器)优缺点对比
标题:Vue + Vuex 项目中正确使用 JWT 进行身份认证的实践指南
原生JS获取元素集合的子元素宽度实例
微信小程序 scroll-view组件实现列表页实例代码
IOS倒计时设置UIButton标题title的抖动问题
北京网页设计制作网站有哪些,继续教育自动播放怎么设置?
Laravel如何实现多对多模型关联?(Eloquent教程)
iOS正则表达式验证手机号、邮箱、身份证号等
香港服务器如何优化才能显著提升网站加载速度?
企业网站制作这些问题要关注
Laravel怎么生成URL_Laravel路由命名与URL生成函数详解
,怎么在广州志愿者网站注册?
Laravel怎么实现观察者模式Observer_Laravel模型事件监听与解耦开发【指南】
如何用已有域名快速搭建网站?
如何在万网自助建站中设置域名及备案?
Laravel如何使用Facades(门面)及其工作原理_Laravel门面模式与底层机制
Zeus浏览器网页版官网入口 宙斯浏览器官网在线通道
Windows10电脑怎么查看硬盘通电时间_Win10使用工具检测磁盘健康
Laravel distinct去重查询_Laravel Eloquent去重方法
学生网站制作软件,一个12岁的学生写小说,应该去什么样的网站?
微信小程序 wx.uploadFile无法上传解决办法
uc浏览器二维码扫描入口_uc浏览器扫码功能使用地址
如何实现建站之星域名转发设置?
UC浏览器如何切换小说阅读源_UC浏览器阅读源切换【方法】
Laravel如何使用Gate和Policy进行权限控制_Laravel权限判定与策略规则配置
如何在HTML表单中获取用户输入并结合JavaScript动态控制复利计算循环
电商网站制作多少钱一个,电子商务公司的网站制作费用计入什么科目?

