linux 时区时间相关库函数

时钟计数

clock
clock_t clock(void) ;
返回处理器调用某个进程或函数所花费的时间。函数返回从“开启这个程序进程”到“程序中调用clock()函数”时之间的CPU时钟计时单元(clock tick)数,其中clock_t是用来保存时间...”
clock 函数的返回值类型是clock_t,它除以CLOCKS_PER_SEC来得出时间,一般用两次clock函数来计算进程自身运行的时间.
ANSI clock有三个问题:
1)如果超过一个小时,将要导致溢出.
2)函数clock没有考虑CPU被子进程使用的情况.
3)也不能区分用户空间和内核空间.
所以clock函数在linux系统上变得没有意义.

时间/时区获取/设置

clock_gettime
clock_t times(struct timespec *buf);
clk_id : 检索和设置的clk_id指定的时钟时间。
CLOCK_REALTIME:系统实时时间,随系统实时时间改变而改变,即从UTC1970-1-1 0:0:0开始计时,中间时刻如果系统时间被用户改成其他,则对应的时间相应改变
CLOCK_MONOTONIC:从系统启动这一刻起开始计时,不受系统时间被用户改变的影响
CLOCK_PROCESS_CPUTIME_ID:本进程到当前代码系统CPU花费的时间
CLOCK_THREAD_CPUTIME_ID:本线程到当前代码系统CPU花费的时间
timespec类型包含一个nss两个时间

time
time_t time(time_t * timer);
获取当前的系统时间,返回的结果是一个time_t类型,其实就是一个大整数,其值表示从CUT(Coordinated Universal Time)时间1970年1月1日00:00:00(称为UNIX系统的Epoch时间)到当前时刻的秒数

gettimeofday
int gettimeofday(struct timeval*tv, struct timezone *tz);
函数返回从TC1970-1-1 0:0:0开始到现在的微秒/秒数,以及时区信息 。
其参数tv是保存获取时间结果的结构体,参数tz用于保存时区结果:
struct timezone{
int tz_minuteswest;/*格林威治时间往西方的时差分钟数*/
int tz_dsttime;/*DST 时间的修正方式*/
}
timezone 参数若不使用则传入NULL即可。
而结构体timeval的定义为:
struct timeval{
long int tv_sec; // 秒数
long int tv_usec; // 微秒数
}

settimeofday
int settimeofday(const struct timeval *tv , const struct timezone *tz);
settimeofday设置当前时间和时区信息。和gettimeofday相反。

时间转换

localtime
struct tm *localtime(const time_t * calptr); 
time_t格式的时间数值变换成本地时间,考虑到本地时区和夏令时标志;

gmtime
struct tm *gmtime(const time_t *calptr);
time_t格式的时间数值变换成格林威治标准时区(GMT)时间,没有夏令时。

mktime
time_t mktime(struct tm *tm);
tm格式时间转换为自1970年1月1日以来持续时间的秒数

char *asctime(const struct tm *tm);
tm格式的时间转换为字符串

char *asctime_r(const struct tm *tm, char *buf);

char *ctime(const time_t *timep);
把time_t
格式的时间转换为字符串

函数变种

char *ctime_r(const time_t *timep, char *buf);
struct tm *gmtime_r(const time_t *timep, struct tm *result);
struct tm *localtime_r(const time_t *timep, struct tm *result);
这些函数可以将数据存储到用户提供的结构体中。
使用gmtime和localtime等函数后要立即处理结果,否则返回的指针指向的内容可能会被覆盖。使用变种的函数不会。

其他函数

void tzset (void);
设置时间环境变量。
tzset在程序中用来初始化daylight,timezone和tzname全局变量,它首先试图从环 境变量“TZ”中获取时区,如果TZ环境变量存在,即getenv("TZ")返回值不为NULL,且包含内容有效,则使用TZ值;如果该变量存在但内容 无效,比如包含错误的时区名字,则使用UTC;如果该变量不存在,即getenv("TZ")返回NULL,则查找系统时区设置文件,一般是/etc /localtime。localtime所指文件的内容格式可参考tzfile(5)。
这些变量由ftime和localtime函数使用校正格林威治(UTC)时间为本地时间,通过time函数从系统时间计算UTC,使用如下语法设置TZ环境变量:set TZ=tzn[+|-]hh[:mm[:ss]][dzn]
ctime()/localtime()/mktime():这类和时区相关的函数内部会调用tzset,但只是第一次调用tzset会做实际初始化,后面的调用都是直接返回。
https://blog.csdn.net/epicyong333/article/details/5258152

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值