реклама на сайте
подробности

 
 
3 страниц V   1 2 3 >  
Reply to this topicStart new topic
> Определение промежутка времени
d7d1cd
сообщение Apr 22 2013, 17:42
Сообщение #1


Местный
***

Группа: Участник
Сообщений: 442
Регистрация: 26-11-10
Пользователь №: 61 199



Привет всем. Делаю программу на ассемблере. Есть дата и время 2-х событий, которые хранятся в двоично-десятичном коде. Второе событие всегда происходит позже первого. Необходимо определить сколько времени прошло между этими событиями.
Go to the top of the page
 
+Quote Post
Psych
сообщение Apr 22 2013, 18:31
Сообщение #2


Частый гость
**

Группа: Участник
Сообщений: 88
Регистрация: 5-03-11
Пользователь №: 63 410



А таймером никак??
Go to the top of the page
 
+Quote Post
d7d1cd
сообщение Apr 23 2013, 02:45
Сообщение #3


Местный
***

Группа: Участник
Сообщений: 442
Регистрация: 26-11-10
Пользователь №: 61 199



Таймером? Каким образом? Мне же не отмерить промежуток времени надо, а определить его.
Go to the top of the page
 
+Quote Post
AlexFTF
сообщение Apr 23 2013, 04:40
Сообщение #4


Частый гость
**

Группа: Свой
Сообщений: 95
Регистрация: 11-11-10
Из: Новосибирск
Пользователь №: 60 808



А в чем проблема? От второго события отнять первое...
Go to the top of the page
 
+Quote Post
d7d1cd
сообщение Apr 23 2013, 08:23
Сообщение #5


Местный
***

Группа: Участник
Сообщений: 442
Регистрация: 26-11-10
Пользователь №: 61 199



Цитата(AlexFTF @ Apr 23 2013, 08:40) *
А в чем проблема? От второго события отнять первое...

В этом и проблема. Как это сделать? Подскажите алгоритм...
Go to the top of the page
 
+Quote Post
decom
сообщение Apr 23 2013, 09:01
Сообщение #6


Частый гость
**

Группа: Свой
Сообщений: 150
Регистрация: 9-12-12
Из: Саранск
Пользователь №: 74 770



Вы задаете вопросы, на которые настолько легко найти ответ в гугле и интернете, что возникают вопросы...
http://habrahabr.ru/post/112630/
Go to the top of the page
 
+Quote Post
d7d1cd
сообщение Apr 23 2013, 09:25
Сообщение #7


Местный
***

Группа: Участник
Сообщений: 442
Регистрация: 26-11-10
Пользователь №: 61 199



Цитата(decom @ Apr 23 2013, 13:01) *
Вы задаете вопросы, на которые настолько легко найти ответ в гугле и интернете, что возникают вопросы...
http://habrahabr.ru/post/112630/

Спасибо за ссылку на статью. Однако это не совсем то, что мне нужно.Точнее это совсем не то, что мне нужно. Мне не надо отмерять промежуток времени. Мне надо определить сколько прошло между 2-мя событиями секунд, минут, часов и суток.
Go to the top of the page
 
+Quote Post
rezident
сообщение Apr 23 2013, 10:17
Сообщение #8


Гуру
******

Группа: Свой
Сообщений: 10 920
Регистрация: 5-04-05
Пользователь №: 3 882



Цитата(d7d1cd @ Apr 23 2013, 14:25) *
Мне надо определить сколько прошло между 2-мя событиями секунд, минут, часов и суток.

Вообще-то вычисление времени проходят в первом полугодии третьего класса начальной школы sm.gif
Это вовсе не бином Ньютона - переводите обе даты в нименьшие единицы измерения (секунды) и вычитаете одно число из другого. По больщому счету такие вычисления ничем не отличаются от функции измерения интервала времени "в попугаях", реализованной на таймере, о котором вам ранее намекали.
Go to the top of the page
 
+Quote Post
d7d1cd
сообщение Apr 23 2013, 10:49
Сообщение #9


Местный
***

Группа: Участник
Сообщений: 442
Регистрация: 26-11-10
Пользователь №: 61 199



Цитата(rezident @ Apr 23 2013, 14:17) *
Вообще-то вычисление времени проходят в первом полугодии третьего класса начальной школы sm.gif
Это вовсе не бином Ньютона - переводите обе даты в нименьшие единицы измерения (секунды) и вычитаете одно число из другого. По больщому счету такие вычисления ничем не отличаются от функции измерения интервала времени "в попугаях", реализованной на таймере, о котором вам ранее намекали.

На счет преобразования в наименьшую единицу измерения я полностью согласен. Однако осмелюсь повториться, что я пишу на ассемблере, поэтому ищу максимально простой алгоритм.

На счет преобразования: перевести в секунды минуты, часы и дни легко. Но как быть с месяцами и годами? Ведь в них не постоянное число секунд...


Go to the top of the page
 
+Quote Post
adnega
сообщение Apr 23 2013, 11:06
Сообщение #10


Гуру
******

Группа: Свой
Сообщений: 2 724
Регистрация: 14-05-07
Из: Ярославль, Россия
Пользователь №: 27 702



Цитата(rezident @ Apr 23 2013, 14:17) *
...переводите обе даты в нименьшие единицы измерения (секунды) и вычитаете одно число из другого.

Например, так:
CODE


Начало эпохи 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);
}
Go to the top of the page
 
+Quote Post
d7d1cd
сообщение Apr 23 2013, 11:57
Сообщение #11


Местный
***

Группа: Участник
Сообщений: 442
Регистрация: 26-11-10
Пользователь №: 61 199



Спасибо за код. Можно попросить прокомментировать строки функции, которая преобразует дату в число дней...
Go to the top of the page
 
+Quote Post
decom
сообщение Apr 23 2013, 12:51
Сообщение #12


Частый гость
**

Группа: Свой
Сообщений: 150
Регистрация: 9-12-12
Из: Саранск
Пользователь №: 74 770



В коде похоже ошибка, надо бы проверить.

Сообщение отредактировал decom - Apr 23 2013, 17:48
Go to the top of the page
 
+Quote Post
AlexFTF
сообщение Apr 24 2013, 04:15
Сообщение #13


Частый гость
**

Группа: Свой
Сообщений: 95
Регистрация: 11-11-10
Из: Новосибирск
Пользователь №: 60 808



Цитата(d7d1cd @ Apr 23 2013, 17:49) *
Однако осмелюсь повториться, что я пишу на ассемблере, поэтому ищу максимально простой алгоритм.


Позвольте поинтересоваться почему Вы пишите программу на ассемблере, а не на Си? Ведь на Си гораздо проще и быстрее реализовать поставленную задачу...
Go to the top of the page
 
+Quote Post
d7d1cd
сообщение Apr 24 2013, 12:07
Сообщение #14


Местный
***

Группа: Участник
Сообщений: 442
Регистрация: 26-11-10
Пользователь №: 61 199



Цитата(AlexFTF @ Apr 24 2013, 08:15) *
Позвольте поинтересоваться почему Вы пишите программу на ассемблере, а не на Си? Ведь на Си гораздо проще и быстрее реализовать поставленную задачу...


Я понимаю, что на С все проще. Однако я могу писать только на ассемблере. Причину такого выбора сказать не могу, так как это будет противоречить правилам данного форума.




Go to the top of the page
 
+Quote Post
Kopa
сообщение Apr 28 2013, 05:51
Сообщение #15


Знающий
****

Группа: Участник
Сообщений: 598
Регистрация: 22-08-05
Пользователь №: 7 861



Цитата(d7d1cd @ Apr 24 2013, 16:07) *
Я понимаю, что на С все проще. Однако я могу писать только на ассемблере. Причину такого выбора сказать не могу, так как это будет противоречить правилам данного форума.

Какому пункту правил?

P.S. Я, например, пишу на Форт (Forth) и подозреваю что тоже нарушаю какой то пункт правил данного форума. rolleyes.gif (на Си кстати тоже, как и на асм)
А судя по репликам прозвучащим в топике не относящихся к вопросу как задающего так и отвечающего то правила нарушают многиеsm.gif
а модераторы форума стоят рядышком и наблюдают за "засиранием" форума "непонятными" вопросами и "непонятными" ответами и "непонятно" где
они должны быть озвучены, а может сразу перейти ссылкой на FAQ или его допонить? smile3046.gif

Сообщение отредактировал Kopa - Apr 28 2013, 05:54
Go to the top of the page
 
+Quote Post

3 страниц V   1 2 3 >
Reply to this topicStart new topic
1 чел. читают эту тему (гостей: 1, скрытых пользователей: 0)
Пользователей: 0

 


RSS Текстовая версия Сейчас: 3rd August 2025 - 06:41
Рейтинг@Mail.ru


Страница сгенерированна за 0.01482 секунд с 7
ELECTRONIX ©2004-2016