版权说明:本文档由用户提供并上传,收益归属内容提供方,若内容存在侵权,请进行举报或认领
文档简介
第第页LinuxC语言时间相关知识总结大家好,我是(Linux)Zn。
实际开发中,经常要获取各种时间。下面汇总几个常用的时间接口:
1、clock_get(ti)me
#include
/**
*
@brief
根据系统(时钟)的类型,获取当前时间
*
*
Det(ai)led
function
description
*
*
@pa(ram)[in]
__clock_id:
系统时钟的类型。常用取值:
-
CLOCK_REALTIME:
从1970年1月1日到目前的时间
-
CLOCK_MONOTONIC:
系统启动时间
-
CLOCK_PROCESS_(CPU)TIME_ID:
本进程运行时间
-
CLOCK_THRE(AD)_CPUTIME_ID:
本线程运行的时间
*
@param[out]
__tp:
存放当前的时间。
*
*
@return
成功则返回0,失败则返回-1
*/int
clock_gettime
(clockid_t
__clock_id,
struct
timespec
*__tp);
timespec结构体:
struct
timespec{
__time_t
tv_sec;
/*
Seconds.
秒
*/
__syscall_slong_t
tv_nsec;
/*
Nanoseconds.
纳秒*/};
例子:
#include
#include
#include
long
long
get_clock_sys_time_ns(void){
struct
timespec
tp;
long
long
time_ns
=
0;
clock_gettime(CLOCK_MONOTONIC,
time_ns
=
(long
long)tp.tv_sec
*
1000000000
+
tp.tv_nsec;
return
time_ns;}int
main(void){
struct
timespec
tp;
///
编译、运行:
2、gettimeofday
#include
/**
*
@brief
获取当前时间(从1970年1月1日到目前的时间)
*
*
Detailed
function
description
*
*
@param[out]
tv:
当前UTC时间
*
@param[out]
tz:
当前时区信息
*
*
@return
成功则返回0,失败则返回-1
*/int
gettimeofday(struct
timeval
*tv,
struct
timezone
*tz);
timeval结构体:
struct
timeval{
__time_t
tv_sec;
/*
Seconds.
秒*/
__suseconds_t
tv_usec;
/*
Microseconds.
微秒*/};
timezone结构体:
struct
timezone
{
int
tz_minu(te)swest;
/*
Minutes
west
of
GMT.
和Greenwich时间差了多少分钟
*/
int
tz_dsttime;
/*
Nonzero
if
DST
is
ever
in
effect.
日光节约时间的状态
*/
};
例子:
#include
#include
#include
long
long
get_sys_time_ms(void){
long
long
time_ms
=
0;
struct
timeval
tv;
gettimeofday(
time_ms
=
((long
long)tv.tv_sec*1000000
+
tv.tv_usec)
/
1000;
return
time_ms;}int
main(void){
///
编译、运行:
3、time
#include
/**
*
@brief
获取1970-01-01
0000
+0000至今的秒数(UTC)
*
*
Detailed
function
description
*
*
@param[out]
tloc:
返回的秒存储指针
*
*
@return
成功则返回秒数,失败则返回-1,错误原因存在errno中。
*/time_t
time(time_t
*tloc);
time_t的类型:
typedef
long
time_t;
例子:
#include
#include
time_t
get_utc_time(void){
return
time(NULL);}int
main(int
argc,
char
**argv){
time_t
utc_time
=
get_utc_time();
printf("utc_time
=
%ld
s",
utc_time);
return
0;}
编译、运行:
4、localtime
#include
/**
*
@brief
将time_t类型的时间转换为struct
tm类型的时间
*
*
Detailed
function
description
*
*
@param[in]
timep:
当前UTC秒数
*
*
@return
返回当地时间
*/struct
tm
*localtime(const
time_t
*timep);
tm结构体:
struct
tm{
int
tm_sec;
/*
Seconds.
[0-60]
(1
leap
second)
*/
int
tm_min;
/*
Minutes.
[0-59]
*/
int
tm_hour;
/*
Hou(rs).
[0-23]
*/
int
tm_mday;
/*
Day.
[1-31]
*/
int
tm_mon;
/*
Month.
[0-11]
注意:0代表1月,以此类推*/
int
tm_year;
/*
Year
-
1900.
该值为实际年份减去1900*/
int
tm_wday;
/*
Day
of
week.
[0-6]
注意:0代表星期一,以此类推*/
int
tm_yday;
/*
Days
in
year.[0-365]
从每年的1月1日开始的天数,其中0代表1月1日,以此类推*/
int
tm_isdst;
/*
DST.
[-1/0/1]
夏玲时标识符*/};
例子:
#include
#include
time_t
get_utc_time(void){
return
time(NULL);}int
main(int
argc,
char
**argv){
time_t
utc_time
=
get_utc_time();
printf("utc_time
=
%ld
s",
utc_time);
struct
tm
*local_tm
=
localtime(
printf("local
time
=
%.4d-%.2d-%.2d
%.2d:%.2d:%.2d",
local_tm->tm_year
+
1900,
local_tm->tm_mon
+
1,
local_tm->tm_mday,
local_tm->tm_hour,
local_tm->tm_min,
local_tm->tm_sec);
return
0;}
编译、运行:
5、localtime_r
#include
/**
*
@brief
将time_t类型的时间转换为struct
tm类型的时间
*
*
Detailed
function
description
*
*
@param[in]
timep:
当前UTC秒数
*
@param[out]
timep:
当地时间
*
*
@return
返回当地时间
*/struct
tm
*localtime_r(const
time_t
*timep,
struct
tm
*result);
localtime不是一个线程安全的函数,关于线程安全的知识点,看阅读往期文章:如何理解线程安全?。
对于实时性要求较高的系统,多个线程同时调用localtime,可能会造成数据被覆盖。我们项目中之前是用localtime来获取系统时间、日期。并使用这个数据去做逻辑,数据异常导致了逻辑异常。
后面使用localtime_r来替代,问题解决。
例子:
#include
#include
time_t
get_utc_time(void){
return
time(NULL);}int
main(int
argc,
char
**argv){
time_t
utc_time
=
get_utc_time();
printf("utc_time
=
%ld
s",
utc_time);
struct
tm
result;
struct
tm
*local_tm
=
localtime_r(
printf("local
time
=
%.4d-%.2d-%.2d
%.2d:%.2d:%.2d",
local_tm->tm_year
+
1900,
local_tm->tm_mon
+
1,
local_tm->tm_mday,
local_tm->tm_hour,
local_tm->tm_min,
local_tm->tm_sec);
printf("result
time
=
%.4d-%.2d-%.2d
%.2d:%.2d:%.2d",
result.tm_year
+
1900,
result.tm_mon
+
1,
result.tm_mday,
result.tm_hour,
result.tm_min,
result.tm_sec);
return
0;}
编译、运行:
6、gmtime
#include
/**
*
@brief
返回tm结构的GMT时间(UTC时间)
*
*
Detailed
function
description
*
*
@param[in]
timep:
当前UTC秒数
*
*
@return
返回当地时间
*/struct
tm
*gmtime(const
time_t
*timep);
例子:
#include
#include
time_t
get_utc_time(void){
return
time(NULL);}int
main(int
argc,
char
**argv){
time_t
utc_time
=
get_utc_time();
printf("utc_time
=
%ld
s",
utc_time);
struct
tm
*gmt_tm
=
gmtime(
printf("gmt
time
=
%.4d-%.2d-%.2d
%.2d:%.2d:%.2d",
gmt_tm->tm_year
+
1900,
gmt_tm->tm_mon
+
1,
gmt_tm->tm_mday,
gmt_tm->tm_hour,
gmt_tm->tm_min,
gmt_tm->tm_sec);
return
0;}
编译、运行:
localtime和gmtime的区别?
localtime和gmtime都是(C语言)中的函数,用于将time_t类型的时间转换为structtm类型的时间。它们的区别在于,gmtime将time_t转换为UTC时间,即世界标准时间,而localtime将time_t转换为本地时间。
例子:使用gmtime与localtime接口返回的小时数来计算当地时区
#include
#include
time_t
get_utc_time(void){
return
time(NULL);}int
main(int
argc,
char
**argv){
time_t
utc_time
=
get_utc_time();
printf("utc_time
=
%ld
s",
utc_time);
struct
tm
*gmt_tm
=
gmtime(
printf("gmt
time
=
%.4d-%.2d-%.2d
%.2d:%.2d:%.2d",
gmt_tm->tm_year
+
1900,
gmt_tm->tm_mon
+
1,
gmt_tm->tm_mday,
gmt_tm->tm_hour,
gmt_tm->tm_min,
gmt_tm->tm_sec);
int
gmt_hou
温馨提示
- 1. 本站所有资源如无特殊说明,都需要本地电脑安装OFFICE2007和PDF阅读器。图纸软件为CAD,CAXA,PROE,UG,SolidWorks等.压缩文件请下载最新的WinRAR软件解压。
- 2. 本站的文档不包含任何第三方提供的附件图纸等,如果需要附件,请联系上传者。文件的所有权益归上传用户所有。
- 3. 本站RAR压缩包中若带图纸,网页内容里面会有图纸预览,若没有图纸预览就没有图纸。
- 4. 未经权益所有人同意不得将文件中的内容挪作商业或盈利用途。
- 5. 人人文库网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对用户上传分享的文档内容本身不做任何修改或编辑,并不能对任何下载内容负责。
- 6. 下载文件中如有侵权或不适当内容,请与我们联系,我们立即纠正。
- 7. 本站不保证下载资源的准确性、安全性和完整性, 同时也不承担用户因使用这些下载资源对自己和他人造成任何形式的伤害或损失。
最新文档
- 2024年门窗安装项目协议范本
- 2024矿石产品销售协议模板大全
- 建筑劳务分包协议模板2024
- 2023-2024学年重庆一中高高三第二次联考高三数学试题
- 2024年航空物流销售代表协议范本
- 2024进口商品订购协议模板集锦
- 2024年订餐服务详细协议样本
- 2024年化妆设备租赁协议条款
- 吊装设备及运输服务协议模板2024
- 创业合作伙伴股份转移协议范本
- 当代社会政策分析 课件 第二章 就业社会政策
- DL-T5333-2021水电水利工程爆破安全监测规程
- 教研组听课记录
- 信息技术知识点
- 人教版(一年级起点)一年级至六年级的英语词汇
- 消防培训四懂四会
- 企业招聘会新闻稿范文300字
- 大学生研学活动策划方案
- 第9课发展全过程人民民主(课件+视频)(高教版2023·基础模块)
- 内蒙古包头市青山区2022-2023学年八年级上学期期末生物试题
- 中医四诊.课件
评论
0/150
提交评论