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

Posted ljbguanli

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了Linux内核中获取时间并转换成本地时区时间相关的知识,希望对你有一定的参考价值。

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

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

最后将时间以“2014-11-02 21: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;
}





































以上是关于Linux内核中获取时间并转换成本地时区时间的主要内容,如果未能解决你的问题,请参考以下文章

Django 在本地时区获取时间

如何在python烧瓶中获取具有本地时区的模板文件的修改日期

蓝牙获取MAC地址并转换成字符串形式

获取本地时区的 Olson TZ 名称?

通过spring MVC从表中查询数据并转换成需要的JSON格式

从时区和 UTC 时间,获取该时间点与本地时间的秒差