Linux C语言时间相关知识总结_第1页
Linux C语言时间相关知识总结_第2页
Linux C语言时间相关知识总结_第3页
Linux C语言时间相关知识总结_第4页
Linux C语言时间相关知识总结_第5页
已阅读5页,还剩6页未读 继续免费阅读

下载本文档

版权说明:本文档由用户提供并上传,收益归属内容提供方,若内容存在侵权,请进行举报或认领

文档简介

第第页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. 本站不保证下载资源的准确性、安全性和完整性, 同时也不承担用户因使用这些下载资源对自己和他人造成任何形式的伤害或损失。

评论

0/150

提交评论