d7d1cd 0 22 апреля, 2013 Опубликовано 22 апреля, 2013 · Жалоба Привет всем. Делаю программу на ассемблере. Есть дата и время 2-х событий, которые хранятся в двоично-десятичном коде. Второе событие всегда происходит позже первого. Необходимо определить сколько времени прошло между этими событиями. Цитата Поделиться сообщением Ссылка на сообщение Поделиться на другие сайты Поделиться
Psych 0 22 апреля, 2013 Опубликовано 22 апреля, 2013 · Жалоба А таймером никак?? Цитата Поделиться сообщением Ссылка на сообщение Поделиться на другие сайты Поделиться
d7d1cd 0 23 апреля, 2013 Опубликовано 23 апреля, 2013 · Жалоба Таймером? Каким образом? Мне же не отмерить промежуток времени надо, а определить его. Цитата Поделиться сообщением Ссылка на сообщение Поделиться на другие сайты Поделиться
AlexFTF 0 23 апреля, 2013 Опубликовано 23 апреля, 2013 · Жалоба А в чем проблема? От второго события отнять первое... Цитата Поделиться сообщением Ссылка на сообщение Поделиться на другие сайты Поделиться
d7d1cd 0 23 апреля, 2013 Опубликовано 23 апреля, 2013 · Жалоба А в чем проблема? От второго события отнять первое... В этом и проблема. Как это сделать? Подскажите алгоритм... Цитата Поделиться сообщением Ссылка на сообщение Поделиться на другие сайты Поделиться
decom 0 23 апреля, 2013 Опубликовано 23 апреля, 2013 · Жалоба Вы задаете вопросы, на которые настолько легко найти ответ в гугле и интернете, что возникают вопросы... http://habrahabr.ru/post/112630/ Цитата Поделиться сообщением Ссылка на сообщение Поделиться на другие сайты Поделиться
d7d1cd 0 23 апреля, 2013 Опубликовано 23 апреля, 2013 · Жалоба Вы задаете вопросы, на которые настолько легко найти ответ в гугле и интернете, что возникают вопросы... http://habrahabr.ru/post/112630/ Спасибо за ссылку на статью. Однако это не совсем то, что мне нужно.Точнее это совсем не то, что мне нужно. Мне не надо отмерять промежуток времени. Мне надо определить сколько прошло между 2-мя событиями секунд, минут, часов и суток. Цитата Поделиться сообщением Ссылка на сообщение Поделиться на другие сайты Поделиться
rezident 0 23 апреля, 2013 Опубликовано 23 апреля, 2013 · Жалоба Мне надо определить сколько прошло между 2-мя событиями секунд, минут, часов и суток. Вообще-то вычисление времени проходят в первом полугодии третьего класса начальной школы :) Это вовсе не бином Ньютона - переводите обе даты в нименьшие единицы измерения (секунды) и вычитаете одно число из другого. По больщому счету такие вычисления ничем не отличаются от функции измерения интервала времени "в попугаях", реализованной на таймере, о котором вам ранее намекали. Цитата Поделиться сообщением Ссылка на сообщение Поделиться на другие сайты Поделиться
d7d1cd 0 23 апреля, 2013 Опубликовано 23 апреля, 2013 · Жалоба Вообще-то вычисление времени проходят в первом полугодии третьего класса начальной школы :) Это вовсе не бином Ньютона - переводите обе даты в нименьшие единицы измерения (секунды) и вычитаете одно число из другого. По больщому счету такие вычисления ничем не отличаются от функции измерения интервала времени "в попугаях", реализованной на таймере, о котором вам ранее намекали. На счет преобразования в наименьшую единицу измерения я полностью согласен. Однако осмелюсь повториться, что я пишу на ассемблере, поэтому ищу максимально простой алгоритм. На счет преобразования: перевести в секунды минуты, часы и дни легко. Но как быть с месяцами и годами? Ведь в них не постоянное число секунд... Цитата Поделиться сообщением Ссылка на сообщение Поделиться на другие сайты Поделиться
adnega 11 23 апреля, 2013 Опубликовано 23 апреля, 2013 · Жалоба ...переводите обе даты в нименьшие единицы измерения (секунды) и вычитаете одно число из другого. Например, так: Начало эпохи 01.01.2000 00:00:00 Работает корректно до 2100 года. //----------------------------------------------------------------------------- //! \fn extern DWORD date_to_int(DWORD y, DWORD m, DWORD d) //! \brief Преобразует дату в число. //! \param y Год. //! \param m Месяц. //! \param d День месяца. //! \return Номер дня по порядку от начала эпохи. //! \sa int_to_date(). //----------------------------------------------------------------------------- extern DWORD date_to_int(DWORD y, DWORD m, DWORD d); //----------------------------------------------------------------------------- //! \fn extern void int_to_date (const DWORD jd, DWORD *y, DWORD *m, DWORD *d) //! \brief Преобразует число в дату. //! \param jd Номер дня по порядку от начала эпохи. //! \param y Указатель на переменную для года. //! \param m Указатель на переменную для месяца. //! \param d Указатель на переменную для дня месяца. //! \sa date_to_int(). //----------------------------------------------------------------------------- extern void int_to_date (const DWORD jd, DWORD *y, DWORD *m, DWORD *d); //----------------------------------------------------------------------------- // int date_to_int(int y, int m, int d) //----------------------------------------------------------------------------- DWORD date_to_int(DWORD y, DWORD m, DWORD d) { if(m < 3) { m += 12; y -= 1; } return ((y * 1461) >> 2) + ((m * 306 + 7) / 10) + d - 730533; } //----------------------------------------------------------------------------- // void int_to_date(DWORD jd, int *y, int *m, int *d) //----------------------------------------------------------------------------- void int_to_date(DWORD jd, DWORD *y, DWORD *m, DWORD *d) { int aa, bb, cc, dd, ee, mm, xx; aa = jd + 2483589; bb = (aa * 4 + 3) / 146097; cc = aa - ((146097 * bb) >> 2); dd = (4 * cc + 3) / 1461; ee = cc - ((1461 * dd) >> 2); mm = ((5 * ee + 2) * 13707) >> 21; *d = ee - ((16043274 * mm + 209716) >> 19) + 1; *m = mm + 3 - 12 * ((mm * 27) >> 8); *y = 100 * bb + dd - 4800 + ((mm * 27) >> 8); } Цитата Поделиться сообщением Ссылка на сообщение Поделиться на другие сайты Поделиться
d7d1cd 0 23 апреля, 2013 Опубликовано 23 апреля, 2013 · Жалоба Спасибо за код. Можно попросить прокомментировать строки функции, которая преобразует дату в число дней... Цитата Поделиться сообщением Ссылка на сообщение Поделиться на другие сайты Поделиться
decom 0 23 апреля, 2013 Опубликовано 23 апреля, 2013 (изменено) · Жалоба В коде похоже ошибка, надо бы проверить. Изменено 23 апреля, 2013 пользователем decom Цитата Поделиться сообщением Ссылка на сообщение Поделиться на другие сайты Поделиться
AlexFTF 0 24 апреля, 2013 Опубликовано 24 апреля, 2013 · Жалоба Однако осмелюсь повториться, что я пишу на ассемблере, поэтому ищу максимально простой алгоритм. Позвольте поинтересоваться почему Вы пишите программу на ассемблере, а не на Си? Ведь на Си гораздо проще и быстрее реализовать поставленную задачу... Цитата Поделиться сообщением Ссылка на сообщение Поделиться на другие сайты Поделиться
d7d1cd 0 24 апреля, 2013 Опубликовано 24 апреля, 2013 · Жалоба Позвольте поинтересоваться почему Вы пишите программу на ассемблере, а не на Си? Ведь на Си гораздо проще и быстрее реализовать поставленную задачу... Я понимаю, что на С все проще. Однако я могу писать только на ассемблере. Причину такого выбора сказать не могу, так как это будет противоречить правилам данного форума. Цитата Поделиться сообщением Ссылка на сообщение Поделиться на другие сайты Поделиться
Kopa 0 28 апреля, 2013 Опубликовано 28 апреля, 2013 (изменено) · Жалоба Я понимаю, что на С все проще. Однако я могу писать только на ассемблере. Причину такого выбора сказать не могу, так как это будет противоречить правилам данного форума. Какому пункту правил? P.S. Я, например, пишу на Форт (Forth) и подозреваю что тоже нарушаю какой то пункт правил данного форума. :rolleyes: (на Си кстати тоже, как и на асм) А судя по репликам прозвучащим в топике не относящихся к вопросу как задающего так и отвечающего то правила нарушают многие:) а модераторы форума стоят рядышком и наблюдают за "засиранием" форума "непонятными" вопросами и "непонятными" ответами и "непонятно" где они должны быть озвучены, а может сразу перейти ссылкой на FAQ или его допонить? :smile3046: Изменено 28 апреля, 2013 пользователем Kopa Цитата Поделиться сообщением Ссылка на сообщение Поделиться на другие сайты Поделиться