Клубове Дир.бг
powered by diri.bg
търси в Клубове diri.bg Разширено търсене

Вход
Име
Парола

Клубове
Dir.bg
Взаимопомощ
Горещи теми
Компютри и Интернет
Контакти
Култура и изкуство
Мнения
Наука
Политика, Свят
Спорт
Техника
Градове
Религия и мистика
Фен клубове
Хоби, Развлечения
Общества
Я, архивите са живи
Клубове Дирене Регистрация Кой е тук Въпроси Списък Купувам / Продавам 03:51 20.05.24 
Компютри и Интернет
   >> Delphi
Всички теми Следваща тема *Кратък преглед

Тема Смятане със TTimeStamp?  
Автор naki (Power User)
Публикувано12.03.08 17:25



Имам проблеми с точността на TDateTime (бърка с цяла минута), затова реших да ползвам TTimeStamp. Отдавна не съм писал на C++ Builder (ползвам версия 6) и съм забравил как се прави. Може ли малко помощ?

Целта ми е да се сметне разликата меджу 2 TDateTime стойности и да се сравни с друга TDateTimе стойност. Преобразувам TDateTime стойностите във ТTimeStamp чрез функцията DateTimeToTimeStamp, а после във Comp (която е някаква нестандартна структура, а не прост тип данни) чрез TimeStampToMSecs. Но после имам проблеми със следния ред код:
if(dtMSec-lastMSec>=diffMSec)
компилатора дава грешка на този ред.
Всички променливи в този ред са от тип Comp.
Грешката е [C++ Error] seans.cpp(270): E2015 Ambiguity between '_fastcall System::operator -(double,const Currency &)' and 'Comp::operator double() const'

Какво да направя за да мога да изчисля разликата между 2-те Comp стойности и да я сравня с 3-тата Comp стойност, и да работи правилно?


Редактирано от naki на 12.03.08 17:28.



Тема Re: Смятане със TTimeStamp?нови [re: naki]  
Автор Formal (незнаещ)
Публикувано13.03.08 13:49



Ти сигурен ли си, че TDateTime бърка с цяла минута? Да не е нещо друго?
TDateTime всъщност е double, където 1 = 1 ден, т.е. 1 мин = 1/(24*60) = около 0.0007. Заедно с дните, които са 5-цифрени за днешни дати, това прави 9 цифри. Double би трябвало да се оправя без проблем с изваждане на числа от един и същи порядък с много по-голяма точност. Самият тип има точност 16-17 цифри.

За Comp може да пробваш да ги cast-неш към Int64 - Comp си е точно това, нищо че е класифициран при реалните типове. Друг е въпросът, че се поддържа само за backward compatibility.

Редактирано от Formal на 13.03.08 13:50.



Тема Re: Смятане със TTimeStamp?нови [re: Formal]  
Автор naki (Power User)
Публикувано13.03.08 15:50



Бърка при изваждане. Тоест date1-date2>=EncodeTime(0,5,0,0) дава резултат ту 6 минути, ту 5 минути.

Оправих проблема, ето крайния код:


TTimeStamp myDiff,diffStamp;
diffStamp=DateTimeToTimeStamp(EncodeTime(Hours,Mins,0,0)); <---това е периода, с който се сравнява
myDiff=DateTimeToTimeStamp(dt-frmMain->lastUpdate);

unsigned __int64 myDiffNum,diffNum; <---- Избягваме ползването на Comp
myDiffNum=myDiff.Date*24*60*60*1000+myDiff.Time; <--- брой милисекунди
diffNum=diffStamp.Date*24*60*60*1000+diffStamp.Time;

if(myDiffNum>=diffNum)





Тема Re: Смятане със TTimeStamp?нови [re: naki]  
Автор vido (минаващ)
Публикувано13.03.08 16:07



Щом имаш решение добре, ама не ми се вярва изваждането на две дати да бърка с 1 минута.
Смятъм че (date1 - date2) * 24 * 60 >= 5 ще свърши по- добра работа от онези 7 реда. Винаги по тизи начин смятъм периоди от време. До сега не съм имал проблеми.



Тема Re: Смятане със TTimeStamp?нови [re: naki]  
Автор Beco_ (Boogie chillun)
Публикувано13.03.08 16:30



naki, нали знаеш, че в Буилдера има винаги още едно възможно решение - да използваш стандартната С библиотека и ф-иите gettime(), settime(), difftime() ако точноста на разликата м/у двете времена е до секунда.


... for a brief moment it seemed that rock 'n roll would inherit the earth.



Всички темиСледваща тема*Кратък преглед
Клуб :  


Clubs.dir.bg е форум за дискусии. Dir.bg не носи отговорност за съдържанието и достоверността на публикуваните в дискусиите материали.

Никаква част от съдържанието на тази страница не може да бъде репродуцирана, записвана или предавана под каквато и да е форма или по какъвто и да е повод без писменото съгласие на Dir.bg
За Забележки, коментари и предложения ползвайте формата за Обратна връзка | Мобилна версия | Потребителско споразумение
© 2006-2024 Dir.bg Всички права запазени.