实现系统函数time,获取当前时间与UTC的间隔

时间:2022-05-14 21:14:06

因种种原因,最近很少上cnblogs了。刚写了一个实现time的函数,可以通过该函数获取当前时间与1970年1月1日 0时0分0秒的差值,精确到秒,可以用在某些没有时候使用time不正确而不得不调用硬件时钟的场合。把其中HWCLOCK打开即可,关闭的话使用的是date获取的系统时间。其中打开时是应用在PPC架构的嵌入式linux上,具体源码如下:

#include <stdio.h>
#include <stdlib.h>
#include <string.h> typedef unsigned short YEAR;
typedef unsigned short MONTH;
typedef unsigned short DAY;
typedef unsigned short HOUR;
typedef unsigned short MIN;
typedef unsigned short SEC; char g_month[][] = {"Jan","Feb","Mar","Apr","May","Jun","Jul","Aug","Sep","Oct","Nov","Dec"}; #define HWCLOCK typedef struct struct_time
{
YEAR year;
MONTH mon;
DAY day;
HOUR hour;
MIN min;
SEC sec;
}time_s; void PrintTimeStruct(time_s *t)
{
if(t)
printf("%d-%d-%d %d:%d:%d\n",t->year,t->mon,t->day,t->hour,t->min,t->sec); } void FillInElem(time_s *t,char *buf,int index)
{
int i = ; switch(index)
{
//week
case :
{
break;
}
//month
case :
{
for(i = ; i < ; i++)
{
if(strcasecmp(buf,g_month[i]) == )
{
t->mon = i+;
break;
}
}
break;
}
//day
case :
{
t->day = atoi(buf);
break;
}
//time
case :
{
#ifdef HWCLOCK
buf[] = '\0';
t->hour = atoi(buf); buf[] = '\0';
t->min = atoi(buf+); t->sec = atoi(buf+);
#else
sscanf(buf,"%d:%d:%d",&t->hour,&t->min,&t->sec);
#endif
break;
}
#ifdef HWCLOCK
case :
{
t->year = atoi(buf);
break;
}
#else
//cst
case :
{
break;
}
//year
case :
{
t->year = atoi(buf);
break;
}
#endif default:break; } } void GetTimeStruct(time_s *t,char *buf)
{
int len = strlen(buf);
int i = ;
int j = ;
int index = ; char temp[]; if(!t || !buf)
{
return ;
} memset(temp,,sizeof(temp));
for(;i < len ; i++)
{
if(buf[i] != ' ')
{
temp[j] = buf[i];
j++;
}
else
{
index++;
//printf("get %s index %d\n",temp,index);
FillInElem(t,temp,index);
memset(temp,,sizeof(temp));
j = ;
#ifdef HWCLOCK
if(index == )
{
i++;
}
if(index >= )
{
return;
}
#endif
} } //printf("get %s \n",temp);
index++;
FillInElem(t,temp,index);
} int GetHWClock(time_s *t)
{
char buf[];
#ifdef HWCLOCK
system("hwclock > time.txt"); #else
system("date > time.txt"); #endif FILE *fp = NULL; if((fp = fopen("time.txt","r")) != NULL)
{
fgets(buf,sizeof(buf),fp);
fclose(fp); GetTimeStruct(t,buf);
//printf("get :%s",buf);
system("rm time.txt");
return ;
}
else
{
return ;
} } int IsRunYear(YEAR y)
{
if( (y % == ) || ( (y % == )&&(y % != ) ))
{
return ;
}
return ;
} unsigned long long GetTickCount(time_s *t)
{
if(t)
{
unsigned long long temp = ;
int RunYearNum = ;// run nian 365 int i = ; //run nian
for(i = ;i < t->year ; i++)
{
if( IsRunYear(i) == )
{
RunYearNum++;
}
} temp += RunYearNum* * * * ;
temp += (t->year - - RunYearNum)* * * * ;
//printf("%d run temp %llu\n",RunYearNum,temp); //month
int day = ;
for(i = ; i < t->mon ; i++)
{
if(i == )
{
if(IsRunYear(t->year) == )
{
day += ;
}
else
{
day += ;
}
}
else if((i == ) || (i == ) || (i == ) || (i == ) || (i == ) || (i == ))
{
day += ;
}
else
{
day += ;
}
} temp += day***;
//printf("day %d temp %llu\n",day,temp);
//day
temp += (t->day - )***; //hour
temp += (t->hour)**; //min
temp += (t->min)*; //sec
temp += t->sec; return temp; }
else
{
return ;
} } int main(void)
{
time_s t; while()
{
GetHWClock(&t);
PrintTimeStruct(&t); printf("tick %llu \n",GetTickCount(&t));
sleep();
} return ;
}

实现系统函数time,获取当前时间与UTC的间隔的更多相关文章

  1. 程序运行时间测试 - 使用系统函数 getrusage 获取程序运行时间

    https://github.com/yaowenxu/Workplace/blob/master/timer/getrusagetimer.c 关键结构体: struct rusage { stru ...

  2. linux和Windows双系统让 Windows 把硬件时间当作 UTC

    linux和Windows双系统让 Windows 把硬件时间当作 UTC Windows设置如下:开 始->运行->CMD,打开命令行程序(Vista则要以管理员方式打开命令行程序方可有 ...

  3. 前端PHP入门-020-重点日期函数之获取时期时间信息函数

    你需要知道关于时间的几个概念: 时区/世界时/unix时间戳 1.时区 这个概念,之前大家听说过很多.我们来啰嗦两句,我们现实生活中使用的实区,在电脑里面也是一样有规定的. 1884年在华盛顿召开国际 ...

  4. round函数和获取当前时间函数

    round函数:对一个浮点类型的数据进行四舍五入:round(3.14)   运行结果就是3 获取当前时间: time.time()    ,time函数需要导入才能使用,import time  

  5. vc 获取当前时间 &lpar;zhuan&rpar;

    vc 获取当前时间(2010-02-10 11:34:32) http://wenku.baidu.com/view/6ade96d049649b6648d7475e.html 1.使用CTime类 ...

  6. vc 获取当前时间

    1.使用CTime类 CString str; //获取系统时间 CTime tm; tm=CTime:: GetCurrentTime_r(); str=tm.Format("现在时间是% ...

  7. 日期时间函数 mysql 和sqlserver 中对于常用函数的日期和时间函数的区别

    1. sqlserver中获取时间用getdate(),默认返回格式是2019-01-21 13:58:33.053,具体的年月日,时分秒毫米,年月日之间用短线连接,时分秒之间用冒号连接,秒和毫米之间 ...

  8. 获取当前时间 YYYY-MM-DD

    1.函数封装 /** * 获取当前时间 * 格式YYYY-MM-DD */ Vue.prototype.getNowFormatDate = function() { var date = new D ...

  9. Sql Server 的本地时间和UTC时间

    一,本地时间和UTC时间 本地时间 世界的每个地区都有自己的本地时间,整个地球分为二十四时区,每个时区都有自己的本地时间. UTC时间 在国际无线电通信中,为统一而普遍使用一个标准时间,称为通用协调时 ...

随机推荐

  1. Android开发--ListView的应用

    1.简介 ListView用于以列表的形式展示数据.它在装载数据时,不能使用ListView类的add()等相关方法添加,而要借助Adapter对象进行添加.另外,由于 系统提供的Adapter往往不 ...

  2. &lbrack;BZOJ 3530&rsqb; &lbrack;Sdoi2014&rsqb; 数数 【AC自动机&plus;DP】

    题目链接:BZOJ - 3530 题目分析 明显是 AC自动机+DP,外加数位统计. WZY 神犇出的良心省选题,然而去年我太弱..比现在还要弱得多.. 其实现在做这道题,我自己也没想出完整解法.. ...

  3. css&period;day03&period;eg

    <!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/ ...

  4. PHP填补数字前后的0

    PHP数字填补0 经常会遇到这样的问题: 自然数字是0,1,2,3...而我们需要的却是满足多少多少位数的数字,如:001,002. 在ID,编号,学号中我们会经常用到补全前面或者后面的空位(一般为前 ...

  5. LFCP

    场景:总结LFCP项目开发中遇到的问题! 1 运营支撑 项目结构: 1.1 hessian配置 服务端实现: 客户端调用: 1.2 问题排查 之前一段时间,运营支撑项目能够正常运行,中间有其它事情要做 ...

  6. 【Python爬虫实战】微信爬虫

    所谓微信爬虫,即自动获取微信的相关文章信息的一种爬虫.微信对我们的限制是很多的,所以我们需要采取一些手段解决这些限制主要包括伪装浏览器.使用代理IP等方式http://weixin.sogou.com ...

  7. 【Unity】5&period;2 天空盒

    分类:Unity.C#.VS2015 创建日期:2016-04-20 一.简介 Unity中的天空盒实际上是一种使用了特殊类型Shader的材质,这种类型的材质可以笼罩在整个游戏场景之外,并根据材质中 ...

  8. Linux 线程调度

    1.线程sleep()后,会让出cpu的时间片,交由其他线程进行抢占cpu. 线程之间正常的切换是依靠时间片的. 当主线程没有结束,且其在所占有的时间片内,并没有结束自己的工作,此时,子线程将会抢占c ...

  9. Linux简介及最常用命令(简单易学,但能解决95&percnt;以上的问题)

    转载 longctw 版权声明:只为分享.欢迎转载^V^ https://blog.csdn.net/xulong_08/article/details/81463054 Linux是目前应用最广泛的 ...

  10. C&num;中string&lbrack;&rsqb;数组和list&lt&semi;string&gt&semi;泛型的相互转换 【转】

    http://www.cnblogs.com/szjdw/archive/2012/03/09/2387885.html 1,从System.String[]转到List<System.Stri ...