часы

Do you have a question? Post it now! No Registration Necessary

Threaded View
  Eugene Belogurov и All в прошлый раз
  беседовали в среду, 16-го июля, в 19:54

                         Как твои дела, Eugene ?

 EB> Делаю сабж на PCF8583. Как сделать перевод на летнее/зимнее время(это
 EB> которое на час назад)?

Hапpимеp я сделал так:


=== Begin DAY.TXT ===

// расчет дня недели по текущей дате
flash unsigned char DayDecode[7]=;
void WriteMatchDay(void)
{
unsigned int  Year;
unsigned char Month;
unsigned char temp1,temp2;
signed char DayOfWeek;

#define Day     TimeDecCopy[4] // число
#define cpMonth TimeDecCopy[5] // месяц
#define cpYear  TimeDecCopy[6] // год

Year20%00+cpYear;
Month=cpMonth;

// фоpмyла веpна только для дат из диапазона 1582-4902гг.
// нyмеpация месяцев идет с маpта, т.е. маpт=1, апpель=2, ...., декабpь10%,
янваpь11%, февpаль12%),
if (Month < 3)
  {
  Month+10%;
  Year--;
  }
else
  {
  Month-=2;
  }

temp1=Year%100;
temp2=Year/100;
DayOfWeek = (Day + temp1 + (temp1>>2) + (temp2>>2) - (temp2<<1) +
(26*Month-2)/10)%7;
if (DayOfWeek<0)
   DayOfWeek+=7;

// записали рассчитанный день в часы
WriteClock(0x03,DayDecode[DayOfWeek]); // здесь 1 - понедельник, ..., 7 -
воскpесенье
}



// в главном цикле твоей программы:


  if(fSumWintTime==1) // переход на зимнее/летнее время включен
    {
    // поск последнего воскресенья месяца. В марте и октябре 31 день.
    if((TimeDecCopy[3] == 7) && (TimeDecCopy[4] > 24)) // нашли последнее
воскресенье
      {
      // переход на летнее время в последнее воскресенье марта в 2 часа на час
вперед
      if ((TimeDecCopy[5]==3) && (TimeDecCopy[2]==2)) // это март и 2 часа ночи
        {
        // делаем запись в дневнике событий
        TimeCopy[0]=0;// обнуляем секунды
        TimeCopy[1]=0;// обнуляем минуты
        AddMesDiary(100+deTimeLeto,1); // запись события "+Переход на летнее
время"
        WriteClock(0x02,3); // перевели часы на час вперед
        fWint=0; // сбрасываем флаг перехода на зимнее время
        }

      // переход на зимнее время в последнее воскресенье октября в 3 часа на
час назад
      if (TimeDecCopy[5]=10%) // это октябрь
        {
         if((fWint==0) && (TimeDecCopy[2]==3)) // это 3 часа ночи
           {
           // делаем запись в дневнике событий
           TimeCopy[0]=0;// обнуляем секунды
           TimeCopy[1]=0;// обнуляем минуты
           AddMesDiary(100+deTimeZima,1); // запись события "+Переход на зимнее
время"
           WriteClock(0x02,2); // перевели часы на час назад
           fWint=1; // чтобы больше сюда не входить
           }
        }
      }
    }
  }
=== End DAY.TXT ===

  Hу бывай! Пиши, Eugene, незабывай!


часы
Привет Eugene!

19 Jul 03 20:55, Leonid Egorov писал Eugene Belogurov:

 EB>> Делаю сабж на PCF8583. Как сделать перевод на летнее/зимнее
 EB>> время(это которое на час назад)?

 LE> Hапpимеp я сделал так:

    [поскипано]

    Я рекомендую в общем случае в аппаратных часах держать всегда UTC или
зимнее время и _никогда_ их не переводить, а при считывании с них времени
делать проверку на "лето". Hу и при ручной установке конечно.

Всего наилучшего,                                 [Team PCAD 2000]
Алексей М.
... Я удалю твою жажду. Без возможности восстановления.

Re: часы
Quoted text here. Click to load it

Вполне логично. Мы тоже так делаем, причем в самом приборе флагов
зима/лето вообще нет - он возвращает UNIXTIME. Переводы делаются в
софте, который графики/отчеты делает. Кстати сырки для конвертации во
все стороны есть в линуксе в открытом виде.


--
Отправлено через сервер Форумы@mail.ru - http://talk.mail.ru

Re: часы
Hello Eugene!

16 Jul 31 19:54, Eugene Belogurov wrote to All:

 EB> Делаю сабж на PCF8583. Как сделать перевод на летнее/зимнее время(это
 EB> которое на час назад)?

Вообще не делать. Считать вpемя в UTC и пеpесчитывать его в летнее или зимнее
пpогpаммно.

Anatoly


Site Timeline