Телесистемы
 Разработка, производство и продажа радиоэлектронной аппаратуры
На главную   | Карта сайта | Пишите нам | В избранное
Требуется программист в Зеленограде
- обработка данных с датчиков; ColdFire; 40 тыс.
e-mail:jobsmp@pochta.ru

Телесистемы | Электроника | Конференция «Микроконтроллеры и их применение»

Можно так(+)

Отправлено Quasy 17 мая 2007 г. 14:03
В ответ на: Алгоритм преобразования 32-х битного счётчика секунд в формат год/месяц/число/час/минута/секунда, ну и ещё день недели отправлено <font color=gray>ДМ</font> 17 мая 2007 г. 13:42

//--------------------------
struct type_time {
unsigned char tm_sec;
unsigned char tm_min;
unsigned char tm_hour;
unsigned char tm_day;
unsigned char tm_month;
unsigned int tm_year;
};

/********************************************************/
/* Convert Date and Time to long seconds */
/********************************************************/
unsigned long DateTime_ToLong(struct type_time *ttime)
{
volatile unsigned char month;
volatile unsigned int year;
volatile unsigned long c, ya;
volatile unsigned long res;

month = ttime->tm_month;
year = ttime->tm_year;

if(month > 2)
{
month -= 3;
}/*if*/
else
{
month += 9;
year--;
}/*else*/

c = (year / 100L);
ya = (year - (100L * c));
res = (146097L * c)/4L + (1461L * ya)/4L + (153L * month + 2L)/5L + ttime->tm_day;
return (res - 720000L) * 86400L + (ttime->tm_hour * 60L + ttime->tm_min) * 60L +ttime->tm_sec;
}/*DateTime_ToLong*/
/*******************************************************************************/

/*****************************************/
/* Convert long seconds to Date and Time */
/*****************************************/
void LongTo_DateTime(unsigned long j, struct type_time *ttime)
{
volatile unsigned long d, m, y;
volatile unsigned long date, t;

date = (j / 86400L);
t = (j - (date * 86400L));
date += 720000L;
y = (4L * date - 1L) / 146097L;
d = (4L * date - 1L - 146097L * y) / 4L;
date = (4L * d + 3L) / 1461L;
d = (4L * d + 7L - 1461L * date) / 4L;
m = (5L * d - 3L) / 153L;
d = (5L * d + 2L - 153L * m) / 5L;
y = 100L * y + date;

if (m < 10L)
{
m += 3L;
}/*if*/
else
{
m -= 9L;
y++;
}/*else*/

ttime->tm_month = m;
ttime->tm_year = y;
ttime->tm_day = d;
ttime->tm_sec = (t % 60L);
t /= 60L;
ttime->tm_hour = (t / 60L);
ttime->tm_min = (t % 60L);
}/*LongTo_DateTime*/
/**************************************************/


// Объявления глобальных переменных
unsigned long Astro, copyAstro;
struct type_time today_tt;

// Вызов
Astro = 1074340800L; // 12ч 00мин 00сек 01/07/2005 г.
LongTo_DateTime( Astro ,&today_tt);
copyAstro = DateTime_ToLong( &today_tt );


Составить ответ | Вернуться на конференцию

Ответы


Отправка ответа
Имя*: 
Пароль: 
E-mail: 
Тема*:

Сообщение:

Ссылка на URL: 
URL изображения: 

если вы незарегистрированный на форуме пользователь, то
для успешного добавления сообщения заполните поле, как указано ниже:
введите число 45:

Перейти к списку ответов | Конференция | Раздел "Электроника" | Главная страница | Карта сайта

Rambler's Top100 Рейтинг@Mail.ru
 
Web telesys.ru