热度 18
2015-7-18 16:56
1118 次阅读|
0 个评论
在前面的博客中,讲到了 SylixOS 下系统的时间的操作,但那个博客里面提供的例程实际用途不大。实际使用往往是从外部获取一个完整的标准时间,然后将此标准时间设置进系统时间。因此这里使用 POSIX1003.1 的相关函数重新编写了一个例程。例程比较简单,而且注释比较详细,详细大部分读者都能看懂。 在 32bits 的 Linux 系统中,其时间使用的是 32bits 变量表示,这样最大表示的时间不会超过 2038 年。这个问题在 SylixOS 中并不存在,因为 SylixOS 使用的是 64bits 表示时间。虽然 2038 年还很遥远,但有些嵌入式设备运行 10 年 8 年也是很正常的事情。 #include #include int main (int argc, char *argv[]) { int istatus; struct tm *tm_time; struct timespec settime; istatus = clock_gettime(CLOCK_REALTIME,settime);/* 读取系统时间 */ if(istatus == -1) { printf("read time error"); } tm_time = localtime((settime.tv_sec)); /* 转换时间表示格式*/ printf("%d-%2d-%2d ",(1900+tm_time-tm_year), /* 显示日期 */ (1+tm_time-tm_mon),tm_time-tm_mday); printf("%d:%d:%d",tm_time-tm_hour, /* 输出当前系统时间 */ tm_time-tm_min,tm_time-tm_sec); printf(" %d\n", tm_time-tm_wday); /* 显示星期数 */ /* 使用 ctime 直接显示,与 localtime 函数的转换做对比 */ printf(ctime((settime.tv_sec))); printf("\n"); tm_time-tm_hour = tm_time-tm_hour + 1; /* 在当前时间上加1小时*/ settime.tv_sec = mktime(tm_time); settime.tv_nsec = 0; istatus = clock_settime(CLOCK_REALTIME,settime);/* 设置系统时间 */ if(istatus == -1) { printf("set time error"); } istatus = clock_gettime(CLOCK_REALTIME,settime);/* 读取系统时间 */ if(istatus == -1) { printf("read time error"); } printf(ctime((settime.tv_sec))); printf("\n"); system("hwclock --systohc"); /* 将时间同步到 RTC*/ return 0; }