linux utc转本地时间,Linux内核中获取时间并转换成本地时区时间

以下的函数get_time_str实现了在内核中获取本地时间的功能。

他首先获取utc时间,然后依据系统的时区timezone转换成本地时间,

最后将时间以“2014-11-02 21:14:08”的字符串的形式输出到output缓冲区中。

函数的返回值。是输出的字符串的长度。

#include

#include

#include

int get_time_str(char *output)

{

struct timex  txc;

struct rtc_time tm;

/* 获取当前的UTC时间 */

do_gettimeofday(&(txc.time));

/* 把UTC时间调整为本地时间 */

txc.time.tv_sec -= sys_tz.tz_minuteswest * 60;

/* 算出时间中的年月日等数值到tm中 */

rtc_time_to_tm(txc.time.tv_sec,&tm);

return sprintf(output, "%04d-%02d-%02d %02d:%02d:%02d"

,tm.tm_year+1900

,tm.tm_mon+1

,tm.tm_mday

,tm.tm_hour

,tm.tm_min

,tm.tm_sec);

}

其实。系统调用gettimeofday就是由sys_gettimeofday()实现的。

而sys_gettimeofday()也就是简单的将调用do_gettimeofday()得到的时间值拷贝给用户态。

其代码例如以下:

asmlinkage long sys_gettimeofday(struct timeval __user *tv, struct timezone __user *tz)

{

if (likely(tv != NULL)) {

struct timeval ktv;

do_gettimeofday(&ktv);

if (copy_to_user(tv, &ktv, sizeof(ktv)))

return -EFAULT;

}

if (unlikely(tz != NULL)) {

if (copy_to_user(tz, &sys_tz, sizeof(sys_tz)))

return -EFAULT;

}

return 0;

}

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值