Centos系统下载大全 | Redhat系统下载大全 | Windows2012系统下载大全 | Windows2008系统下载大全| CMS教程 | 网站地图 51运维网-专注Linux/Unix系统安全运维!
当前位置:51运维网 > 内核 > Linux内核 > 正文

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

时间:2016-05-25 00:21 来源:网络整理 作者:51ou.com 阅读:

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

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

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

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


#include <linux/time.h>

#include <linux/timex.h>

#include <linux/rtc.h>

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;
}


本文永久更新地址:

感谢您对【51运维网 http://www.51ou.com/】的支持,我们为您免费提供《Linux内核中获取时间并转换成本地时区时间》技术文章,《Linux内核中获取时间并转换成本地时区时间》详细使用和说明,有时《Linux内核中获取时间并转换成本地时区时间》可能不完善、敬请谅解!如果《Linux内核中获取时间并转换成本地时区时间》有错误请给我们留言,我们将尽快修复文章错误,如果您觉得本站不错,请分享给周围的朋友!谢谢!

顶一下
(0)
0%
踩一下
(0)
0%
发表评论
请自觉遵守互联网相关的政策法规,严禁发布色情、暴力、反动的言论。
验证码:点击我更换图片