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开始计时,中间时刻如果系统时间被用户改成其他,则对应的时间相应改变
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下获取当前时间的相关函数
# 返回值
# 可以通过
# 的是
# 就会
# 在这里
# 结果是
# 用了
# 不受
# 重写
# 月中
# 相对于
# 转换为
# 零点
# 需要注意
# 使用这个
# 大家多多
# 两行
# 星期天
# 这段话
# 则对
相关文章:
义乌企业网站制作公司,请问义乌比较好的批发小商品的网站是什么?
如何选择高性价比服务器搭建个人网站?
Python文件管理规范_工程实践说明【指导】
如何在沈阳梯子盘古建站优化SEO排名与功能模块?
矢量图网站制作软件,用千图网的一张矢量图做公司app首页,该网站并未说明版权等问题,这样做算不算侵权?应该如何解决?
北京网站制作网页,网站升级改版需要多久?
如何在新浪SAE免费搭建个人博客?
佛山企业网站制作公司有哪些,沟通100网上服务官网?
网站制作话术技巧,网站推广做的好怎么话术?
如何通过IIS搭建网站并配置访问权限?
香港服务器WordPress建站指南:SEO优化与高效部署策略
C++如何将C风格字符串(char*)转换为std::string?(代码示例)
如何通过商城免费建站系统源码自定义网站主题?
如何通过wdcp面板快速创建网站?
微信小程序 input输入框控件详解及实例(多种示例)
如何在橙子建站中快速调整背景颜色?
建站之星×万网:智能建站系统+自助建站平台一键生成
建站之星如何配置系统实现高效建站?
如何配置IIS站点权限与局域网访问?
详解免费开源的.NET多类型文件解压缩组件SharpZipLib(.NET组件介绍之七)
建站之星五站合一营销型网站搭建攻略,流量入口全覆盖优化指南
广州网站制作的公司,现在专门做网站的公司有没有哪几家是比较好的,性价比高,模板也多的?
C#如何序列化对象为XML XmlSerializer用法
较简单的网站制作软件有哪些,手机版网页制作用什么软件?
制作假网页,招聘网的薪资待遇,会有靠谱的吗?一面试又各种折扣?
宝塔新建站点为何无法访问?如何排查?
宝塔建站无法访问?如何排查配置与端口问题?
如何快速搭建虚拟主机网站?新手必看指南
建站之星客服服务时间及联系方式如何?
如何快速搭建高效简练网站?
高端网站建设与定制开发一站式解决方案 中企动力
美食网站链接制作教程视频,哪个教做美食的网站比较专业点?
微信小程序 五星评分(包括半颗星评分)实例代码
如何在IIS管理器中快速创建并配置网站?
建站三合一如何选?哪家性价比更高?
清单制作人网站有哪些,近日“兴风作浪的姑奶奶”引起很多人的关注这是什么事情?
北京企业网站设计制作公司,北京铁路集团官方网站?
网站广告牌制作方法,街上的广告牌,横幅,用PS还是其他软件做的?
Python lxml的etree和ElementTree有什么区别
制作证书网站有哪些,全国城建培训中心证书查询官网?
如何使用Golang table-driven基准测试_多组数据测量函数效率
如何快速搭建安全的FTP站点?
专业网站建设制作报价,网页设计制作要考什么证?
安徽网站建设与外贸建站服务专业定制方案
建站主机功能解析:服务器选择与快速搭建指南
香港服务器建站指南:免备案优势与SEO优化技巧全解析
如何在腾讯云服务器快速搭建个人网站?
制作无缝贴图网站有哪些,3dmax无缝贴图怎么调?
建站主机SSH密钥生成步骤及常见问题解答?
单页制作网站有哪些,朋友给我发了一个单页网站,我应该怎么修改才能把他变成自己的呢,请求高手指点迷津?
*请认真填写需求信息,我们会在24小时内与您取得联系。