Linux编程--获取当前时间
时间:2022-06-13
本文章向大家介绍Linux编程--获取当前时间,主要内容包括其使用实例、应用技巧、基本知识点总结和需要注意事项,具有一定的参考价值,需要的朋友可以参考一下。
背景
最近在重新编译ijkplayer,并且希望能够打印出来各个阶段的时间,以便对于ijkplayer进一步调优
获取时间
Linux获取时间有多种方案,都需要添加#include <time.h>
- time调用
通过
time
函数获得当前时间,注意单位为秒,其中time_t
结构体是一个有符号的长整型。 而ctime
是一个返回格式化好的字符串的指针。格式为Thu Nov 24 18:22:48 1986n
#include <time.h>
int main()
{
time_t timep;
time (&timep);
printf(“%s”,ctime(&timep));
return 0;
}
- gettimeofday调用
通过
gettimeofday
调用返回来的是一个timeval
的结构体,其中tv_sec
是秒数,tv_usec
是微秒数,通过这两个数共同标志当前时间
#ifndef _STRUCT_TIMEVAL
#define _STRUCT_TIMEVAL struct timeval
_STRUCT_TIMEVAL
{
__darwin_time_t tv_sec; /* seconds */
__darwin_suseconds_t tv_usec; /* and microseconds */
};
#endif /* _STRUCT_TIMEVAL */
该函数的使用如下
#include <sys/time.h>
int main(void)
{
struct timeval time;
gettimeofday(&time, NULL);
printf("Current Time Seconds: %ld,uSeconds:%ldn", time.tv_sec,time.tv_usec);
return 0;
}
注意
因为在手机上测试的时候,通过gettimeofday
获取时间,并且通过网上t.tv_sec*1000+t.tv_usec/1000
来计算毫秒数,结果得到的时间错误。而原因就是32位的系统上,long占四个字节,超出2^32则会溢出,导致结果错误。
比如,当前通过gettimeofday
获取到的t.tv_sec
为1534132538,而t.tv_sec*1000
的结果为8292133328。
原因是:
1534132538的二进制为:
1011011011100010000000100111010
1534132538000的二进制为:
10110010100110001011011001100101010010000
而在32位的机器上,long最多占用32,所以得到的32位二进制如下:
00110001011011001100101010010000
转成10进制就是:
829213328
所以,64位的CPU可以进行该运算,32位的会因为溢出导致值不对
最终的解决方案是,通过long long类型的数据结构来保存,long long 占8个字节,也就是最大值为2^64:
long long gettime(){
struct timeval tv;
gettimeofday(&tv,NULL);
long long seconds=tv.tv_sec; // 先将tv.tv_sec保存成long long类型
return seconds*1000+tv.tv_usec/1000;
}
- 利用Centos或RedHat的iso镜像搭建本地yum仓库
- QUIC协议初探-iOS实践
- Golang语言社区--【基础知识】常量
- 服务器日志备份超节省空间的思路
- 《企鹅电竞weex实践—— iOS SDK的小九九》
- Linux操作系统DNS解析(nameserver)监控脚本
- 不给“爸爸”添麻烦 - iTOP iOS 动态库改造
- 移动SEO分享:php自动提交复合型Sitemap到百度搜索
- 《Android外部存储》
- Android JNI出坑指南
- 《iPhone X ARKit Face Tracking》
- 结合标签广告,定制一个QQ邮箱订阅
- SecureCRT全局发送相同命令,快速抓取服务器信息的方法
- [不定期更新]简单的shell脚本练习实例
- JavaScript 教程
- JavaScript 编辑工具
- JavaScript 与HTML
- JavaScript 与Java
- JavaScript 数据结构
- JavaScript 基本数据类型
- JavaScript 特殊数据类型
- JavaScript 运算符
- JavaScript typeof 运算符
- JavaScript 表达式
- JavaScript 类型转换
- JavaScript 基本语法
- JavaScript 注释
- Javascript 基本处理流程
- Javascript 选择结构
- Javascript if 语句
- Javascript if 语句的嵌套
- Javascript switch 语句
- Javascript 循环结构
- Javascript 循环结构实例
- Javascript 跳转语句
- Javascript 控制语句总结
- Javascript 函数介绍
- Javascript 函数的定义
- Javascript 函数调用
- Javascript 几种特殊的函数
- JavaScript 内置函数简介
- Javascript eval() 函数
- Javascript isFinite() 函数
- Javascript isNaN() 函数
- parseInt() 与 parseFloat()
- escape() 与 unescape()
- Javascript 字符串介绍
- Javascript length属性
- javascript 字符串函数
- Javascript 日期对象简介
- Javascript 日期对象用途
- Date 对象属性和方法
- Javascript 数组是什么
- Javascript 创建数组
- Javascript 数组赋值与取值
- Javascript 数组属性和方法
- PHP pthreads v3使用中的一些坑和注意点分析
- php ActiveMQ的安装与使用方法图文教程
- ThinkPHP5与单元测试PHPUnit使用详解
- php实现通过stomp协议连接ActiveMQ操作示例
- PHP pthreads v3下的Volatile简介与使用方法示例
- php实现根据身份证获取精准年龄
- php 使用ActiveMQ发送消息,与处理消息操作示例
- php使用gearman进行任务分发操作实例详解
- laravel框架select2多选插件初始化默认选中项操作示例
- PHP pthreads v3在centos7平台下的安装与配置操作方法
- laravel框架路由分组,中间件,命名空间,子域名,路由前缀实例分析
- PHP Beanstalkd消息队列的安装与使用方法实例详解
- 解决windows上php xdebug 无法调试的问题
- php7 图形用户界面GUI 开发示例
- Django开发的简易留言板案例详解