王哲 | 12 Jun 2012 09:45
Picon

confusion about reading time from cmos

Hello everyone:
         
env:
Ubuntu 11.04

I write a program reading time from cmos,and the program is as followed:

#include <stdio.h>
#include <sys/io.h>

unsigned char cmos_read(unsigned char addr)
{
    unsigned char tmp = 0;
    iopl(3);
    outb(addr,0x70);
    tmp = inb(0x71);
    iopl(0);
    return tmp;
}


int main(void)
{
    printf("seconds = %x\n",cmos_read(0));
    printf("minute = %x\n",cmos_read(2));
    printf("hour = %x\n",cmos_read(4));
    system("date");
    return 0;
}


and run the program and the result is as followed:

wanny <at> wanny-C-Notebook-XXXX:~$ sudo ./a.out
seconds = 9
minute = 42
hour = 7
2012年 06月 12日 星期二 15:42:09 CST

question:
why the second is right,minute is right , but the hour is different?

Thanks in advance!!
 

_______________________________________________
Kernelnewbies mailing list
Kernelnewbies <at> kernelnewbies.org
http://lists.kernelnewbies.org/mailman/listinfo/kernelnewbies
Vladimir Murzin | 12 Jun 2012 09:56
Picon

Re: confusion about reading time from cmos

Hi!

It seems that your CMOS count time in UTC. So, If CST stands for China
Standart Time then time zone offset: UTC + 8 hours ;)

Best wishes
Vladimir Murzin

On 6/12/12, 王哲 <wangzhe5004 <at> gmail.com> wrote:
> Hello everyone:
>
> env:
> Ubuntu 11.04
>
> I write a program reading time from cmos,and the program is as followed:
>
> #include <stdio.h>
> #include <sys/io.h>
>
> unsigned char cmos_read(unsigned char addr)
> {
>     unsigned char tmp = 0;
>     iopl(3);
>     outb(addr,0x70);
>     tmp = inb(0x71);
>     iopl(0);
>     return tmp;
> }
>
>
> int main(void)
> {
>     printf("seconds = %x\n",cmos_read(0));
>     printf("minute = %x\n",cmos_read(2));
>     printf("hour = %x\n",cmos_read(4));
>     system("date");
>     return 0;
> }
>
>
> and run the program and the result is as followed:
>
> wanny <at> wanny-C-Notebook-XXXX:~$ sudo ./a.out
> seconds = 9
> minute = 42
> hour = 7
> 2012年 06月 12日 星期二 15:42:09 CST
>
> question:
> why the second is right,minute is right , but the hour is different?
>
> Thanks in advance!!
>

_______________________________________________
Kernelnewbies mailing list
Kernelnewbies <at> kernelnewbies.org
http://lists.kernelnewbies.org/mailman/listinfo/kernelnewbies
王哲 | 12 Jun 2012 10:37
Picon

Re: confusion about reading time from cmos



2012/6/12 Vladimir Murzin <murzin.v <at> gmail.com>
Hi!

It seems that your CMOS count time in UTC. So, If CST stands for China
Standart Time then time zone offset: UTC + 8 hours ;)

    Thanks,and i understand it,Time in cmos is UTC,and the system time is your local time.there is time zone between them. and time in China is earlier 8 hours than  UTC,so time in China shoud be UTC + 8.
     and when you  install the ubuntu, ubuntu will let you choose the area where you are,and configure it.and start up the OS
and OS read UTC from cmos,then,calculate your local time base on the UTC.

Best wishes
Vladimir Murzin

On 6/12/12, 王哲 <wangzhe5004 <at> gmail.com> wrote:
> Hello everyone:
>
> env:
> Ubuntu 11.04
>
> I write a program reading time from cmos,and the program is as followed:
>
> #include <stdio.h>
> #include <sys/io.h>
>
> unsigned char cmos_read(unsigned char addr)
> {
>     unsigned char tmp = 0;
>     iopl(3);
>     outb(addr,0x70);
>     tmp = inb(0x71);
>     iopl(0);
>     return tmp;
> }
>
>
> int main(void)
> {
>     printf("seconds = %x\n",cmos_read(0));
>     printf("minute = %x\n",cmos_read(2));
>     printf("hour = %x\n",cmos_read(4));
>     system("date");
>     return 0;
> }
>
>
> and run the program and the result is as followed:
>
> wanny <at> wanny-C-Notebook-XXXX:~$ sudo ./a.out
> seconds = 9
> minute = 42
> hour = 7
> 2012年 06月 12日 星期二 15:42:09 CST
>
> question:
> why the second is right,minute is right , but the hour is different?
>
> Thanks in advance!!
>

_______________________________________________
Kernelnewbies mailing list
Kernelnewbies <at> kernelnewbies.org
http://lists.kernelnewbies.org/mailman/listinfo/kernelnewbies

Gmane