原创 SylixOS 时间操作--补充

2015-7-18 16:56 1103 18 18 分类: 软件与OS 文集: SylixOS应用开发

  在前面的博客中,讲到了SylixOS下系统的时间的操作,但那个博客里面提供的例程实际用途不大。实际使用往往是从外部获取一个完整的标准时间,然后将此标准时间设置进系统时间。因此这里使用POSIX1003.1的相关函数重新编写了一个例程。例程比较简单,而且注释比较详细,详细大部分读者都能看懂。

 在32bitsLinux系统中,其时间使用的是32bits变量表示,这样最大表示的时间不会超过2038年。这个问题在SylixOS中并不存在,因为SylixOS使用的是64bits表示时间。虽然2038年还很遥远,但有些嵌入式设备运行108年也是很正常的事情。

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

文章评论0条评论)

登录后参与讨论
我要评论
0
18
关闭 站长推荐上一条 /2 下一条