Linux c++获取本地精确时间
程序员文章站
2024-01-27 19:49:46
...
时间函数介绍
Linux c/c++中提供了很多操作时间的库函数,这里简要介绍。
使用头文件 #include <time.h>
常用的时间函数包括以下:
-
time
- 原型:
time_t time(time_t *t);
- 返回从公元1970年1月1日的UTC时间从0时0分0秒算起到现在所经过的秒数
- 如果t 并非空指针的话,此函数也会将返回值存到t指针所指的内存
- 成功则返回秒数,失败则返回((time_t)-1)值,错误原因存于errno中
- 原型:
-
localtime
- 原型:
struct tm *localtime(const time_t * timep);
- 将参数timep所指的time_t结构中的信息转换成真实世界所使用的时间日期表示方法,然后将结果由结构tm返回
- 成功则返回0,失败返回-1,错误代码存于errno
- 结构tm的定义如下,此函数返回的时间日期已经转换成当地时区
struct tm { int tm_sec; int tm_min; int tm_hour; int tm_mday; int tm_mon; int tm_year; int tm_wday; int tm_yday; int tm_isdst; };
- 原型:
-
gettimeofday
- 原型:
int gettimeofday ( struct timeval * tv , struct timezone * tz )
- 把目前的时间由tv所指的结构返回,当地时区的信息则放到tz所指的结构中
- timeval结构定义为:
struct timeval { long tv_sec; /*秒*/ long tv_usec; /*微秒*/ };
- timezone 结构定义为:
struct timezone { int tz_minuteswest; /*和Greenwich 时间差了多少分钟*/ int tz_dsttime; /*日光节约时间的状态*/ };
- 原型:
-
ctime
- 原型:
char *ctime(const time_t *timep);
- 将参数timep所指的time_t结构中的信息转换成真实世界所使用的时间日期表示方法,然后将结果以字符串形态返回
- 此函数已经由时区转换成当地时间,字符串格式为
Wed Jun 30 21 :49 :08 1993
- 原型:
-
asctime
- 原型:
char * asctime(const struct tm * timeptr);
- 将参数timeptr所指的tm结构中的信息转换成真实世界所使用的时间日期表示方法,然后将结果以字符串形态返回
- 此函数已经由时区转换成当地时间,字符串格式为:
Wed Jun 30 21:49:08 1993\n
- 若再调用相关的时间日期函数,此字符串可能会被破坏。此函数与ctime不同处在于传入的参数是不同的结构
- 原型:
-
gmtime
- 原型:
struct tm* gmtime(const time_t*timep);
- 将参数timep 所指的time_t 结构中的信息转换成真实世界所使用的时间日期表示方法,然后将结果由结构tm返回
- 原型:
-
settimeofday
- 原型:
int settimeofday ( const struct timeval *tv,const struct timezone *tz);
- 把目前时间设成由tv所指的结构信息,当地时区信息则设成tz所指的结构
- 注意,只有root权限才能使用此函数修改时间
- 原型:
更多详细信息请使用man手册。
获取精确到毫秒的时间
可以结合time, localtime, strftime
得到本地时间,精确到秒。代码如下:
static string CurrentLocalTime(void)
{
time_t t; //秒时间
tm *local; //本地时间
char buf[128] = {0};
t = time(NULL); //获取目前秒时间
local = localtime(&t); //转为本地时间
strftime(buf, 64, "%Y-%m-%d %H:%M:%S", local); //根据需要自定义格式
return buf;
}
要想得到精确到毫秒的时间,就需要使用gettimeofday
了。代码如下:
/**
* @name: GetLocalTimeWithMs
* @msg: 获取本地时间,精确到毫秒
* @param {type}
* @return: string字符串,格式为YYYYMMDDHHMMSSsss,如:20190710130510368
*/
static string GetLocalTimeWithMs(void)
{
struct timeval tv;
struct tm *ptm;
char buf[128] = {0};
gettimeofday(&tv, NULL);
ptm = localtime(&tv.tv_sec);
strftime(buf, sizeof(buf), "%Y%m%d%H%M%S", ptm); // 精确到秒,与上例结果相同
snprintf(buf + strlen(buf), sizeof(buf) - strlen(buf), "%03ld", tv.tv_usec / 1000); // 最后三位为毫秒
// cout << buf << endl;
return buf;
}
得到字符串表示的本地时间信息后,可根据需要对字符串进行操作,简单方便。
总结
本地时间的获取在各种程序中使用率较高,可以放在项目的util中,供所有代码使用。
上一篇: PHP批量去除BOM头代码分享_PHP
推荐阅读
-
Linux c++获取本地精确时间
-
定时器 setitimer 和 gettimeofday 获取当前时间【Linux微秒级】
-
C语言笔记:标准IO函数 time()、localtime()、gmtime()获取当前系统时间(Linux、windows)
-
Linux C 中获取local日期和时间 time()&localtime()函数
-
linux 获取当前时间,精确到毫秒
-
Linux 下c获取当前时间(精确到秒和毫秒或者微秒)
-
linux获取时间,精确到微秒usec
-
Linux获取系统时间,精确到毫秒
-
Linux 下c获取当前时间(精确到秒和毫秒或者微秒)
-
Linux 下c获取当前时间(精确到秒和毫秒或者微秒)