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

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

в общем, да, но...

Отправлено MOHOMAX 18 февраля 2008 г. 20:01
В ответ на: Деление, умножение, сложение... отправлено Vit 16 февраля 2008 г. 15:11

да, в общем это сложение, деление, остатки...
просто ещё ведь необходимо помнить о том, что есть високосные года и разное количество дней в месяцах...
в общем проблему решил. Нашёл где то функцию по конвертации. Вот её код, если кому интересно:

// localtime.cpp : Defines the entry point for the console application.
//

#include "stdafx.h"
#include <time.h>


//all about tm struct format u can find by follown link:
//http://www.opennet.ru/man.shtml?topic=localtime&russian=0&category=&submit=%F0%CF%CB%C1%DA%C1%D4%D8+man
//enjoy
int ts2tm (long *t, long offset, struct tm* tp);

#define TS 1203167785
#define SECS_PER_HOUR (60 * 60)
#define SECS_PER_DAY (SECS_PER_HOUR * 24)
#define DIV(a, b) ((a) / (b) - ((a) % (b) < 0))
#define LEAPS_THRU_END_OF(y) (DIV (y, 4) - DIV (y, 100) + DIV (y, 400))


static const unsigned short int __mon_yday[2][13] = {
/* Normal years. */
{0, 31, 59, 90, 120, 151, 181, 212, 243, 273, 304, 334, 365},
/* Leap years. */
{0, 31, 60, 91, 121, 152, 182, 213, 244, 274, 305, 335, 366}
};


int _tmain(int argc, _TCHAR* argv[])
{

long t = TS;
struct tm m_tm;
ts2tm(&t, 0, &m_tm);

printf("%d-%d-%d %d:%d\n", m_tm.tm_year, m_tm.tm_mon, m_tm.tm_mday, m_tm.tm_hour, m_tm.tm_min);
time_t tt = TS;
struct tm *m_tm1;


m_tm1 = localtime(&tt);
printf("%d-%d-%d %d:%d", m_tm1->tm_year, m_tm1->tm_mon, m_tm1->tm_mday, m_tm1->tm_hour, m_tm1->tm_min);

return 0;
}



/* Compute the `struct tm' representation of *T,
offset OFFSET seconds east of UTC,
and store year, yday, mon, mday, wday, hour, min, sec into *TP.
Return nonzero if successful. */
long __isleap(long y){
return (y%4)==0;
}

int ts2tm (long *t, long offset, struct tm* tp){
long int days, rem, y;
const unsigned short int *ip;

days = *t / SECS_PER_DAY;
rem = *t % SECS_PER_DAY;
rem += offset;
while (rem < 0)
{
rem += SECS_PER_DAY;
--days;
}
while (rem >= SECS_PER_DAY)
{
rem -= SECS_PER_DAY;
++days;
}
tp->tm_hour = rem / SECS_PER_HOUR;
rem %= SECS_PER_HOUR;
tp->tm_min = rem / 60;
tp->tm_sec = rem % 60;
/* January 1, 1970 was a Thursday. */
tp->tm_wday = (4 + days) % 7;
if (tp->tm_wday < 0)
tp->tm_wday += 7;
y = 1970;

while (days < 0 || days >= ( __isleap(y) ? 366 : 365))
{
/* Guess a corrected year, assuming 365 days per year. */
long int yg = y + days / 365 - (days % 365 < 0);

/* Adjust DAYS and Y to match the guessed year. */
days -= ((yg - y) * 365
+ LEAPS_THRU_END_OF (yg - 1)
- LEAPS_THRU_END_OF (y - 1));
y = yg;
}
tp->tm_year = y - 1900;
if (tp->tm_year != y - 1900)
{
/* The year cannot be represented due to overflow. */
printf("EOVERFLOW\n");
//__set_errno (EOVERFLOW);
return 0;
}
tp->tm_yday = days;
ip = __mon_yday[__isleap(y)];
for (y = 11; days < (long int) ip[y]; --y)
continue;
days -= ip[y];
tp->tm_mon = y;
tp->tm_mday = days + 1;
return 1;
}


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

Ответы


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

Сообщение:

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

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

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

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