<?xml version='1.0' encoding="utf-8"?>
      <rss version='2.0'>
      <channel>
      <title>Форум на Исходниках.RU</title>
      <link>https://forum.sources.ru</link>
      <description>Форум на Исходниках.RU</description>
      <generator>Форум на Исходниках.RU</generator>
  	
      <item>
        <guid isPermaLink='true'>https://forum.sources.ru/index.php?showtopic=339658&amp;view=findpost&amp;p=2978507</guid>
        <pubDate>Mon, 05 Sep 2011 07:17:12 +0000</pubDate>
        <title>Ошибка в вычислениях в модуле DateUtils</title>
        <link>https://forum.sources.ru/index.php?showtopic=339658&amp;view=findpost&amp;p=2978507</link>
        <description><![CDATA[Anatoly Podgoretsky: <div class='tag-quote'><a class='tag-quote-link' href='https://forum.sources.ru/index.php?showtopic=339658&view=findpost&p=2978242'><span class='tag-quote-prefix'>Цитата</span></a> <span class='tag-quote__quote-info'>agesandr &#064; <time class="tag-quote__quoted-time" datetime="2011-09-04T12:52:37+04:00">04.09.11, 08:52</time></span><div class='quote '>Просто думал удобнее будет с TDateTime работать и модулем DateUtils...<br>
А оказалось проще делать все с  TTimeStamp все делать...<br>
Давно просто не работал с Delphi и многое забыть успел )))</div></div><br>
Конечно проще с TDateTime, но надо учитывать его относительную точность, ведь реальный тип это Double, а прочие типы использовать только при крайней нужде.]]></description>
        <author>Anatoly Podgoretsky</author>
        <category>Delphi: Общие вопросы</category>
      </item>
	
      <item>
        <guid isPermaLink='true'>https://forum.sources.ru/index.php?showtopic=339658&amp;view=findpost&amp;p=2978465</guid>
        <pubDate>Mon, 05 Sep 2011 06:37:44 +0000</pubDate>
        <title>Ошибка в вычислениях в модуле DateUtils</title>
        <link>https://forum.sources.ru/index.php?showtopic=339658&amp;view=findpost&amp;p=2978465</link>
        <description><![CDATA[leo: <div class='tag-quote'><a class='tag-quote-link' href='https://forum.sources.ru/index.php?showtopic=339658&view=findpost&p=2977781'><span class='tag-quote-prefix'>Цитата</span></a> <span class='tag-quote__quote-info'>Anatoly Podgoretsky &#064; <time class="tag-quote__quoted-time" datetime="2011-09-02T14:55:16+00:00">02.09.11, 14:55</time></span><div class='quote '>Приведи точное время, хотя бы с точностью до микросекунды, а еще лучше все 15 знаков</div></div><br>
А зачем, если и так <em class='tag-i'>&quot;с этим все понятно&quot;</em> ;)<br>
18:00 как и все часы, кратные 3-м, представляются точно максимум 3-мя двоичными разрядами, т.к. 3*k/24 = k/8, где 8 = 2<sup class='tag-sup'>3</sup><br>
А все часы, не кратные 3-м, будут иметь делитель = 3, который и в десятичной, и в двоичной системе будет давать бесконечную периодическую дробь, например, 17/24 = 0.7083(3) = 0.&#036;B5(5)]]></description>
        <author>leo</author>
        <category>Delphi: Общие вопросы</category>
      </item>
	
      <item>
        <guid isPermaLink='true'>https://forum.sources.ru/index.php?showtopic=339658&amp;view=findpost&amp;p=2978242</guid>
        <pubDate>Sun, 04 Sep 2011 08:52:37 +0000</pubDate>
        <title>Ошибка в вычислениях в модуле DateUtils</title>
        <link>https://forum.sources.ru/index.php?showtopic=339658&amp;view=findpost&amp;p=2978242</link>
        <description><![CDATA[agesandr: <div class='tag-quote'><a class='tag-quote-link' href='https://forum.sources.ru/index.php?showtopic=339658&view=findpost&p=2977781'><span class='tag-quote-prefix'>Цитата</span></a> <span class='tag-quote__quote-info'>Anatoly Podgoretsky &#064; <time class="tag-quote__quoted-time" datetime="2011-09-02T14:55:16+00:00">02.09.11, 14:55</time></span><div class='quote '><div class='tag-quote'><a class='tag-quote-link' href='https://forum.sources.ru/index.php?showtopic=339658&view=findpost&p=2977319'><span class='tag-quote-prefix'>Цитата</span></a> <span class='tag-quote__quote-info'>agesandr &#064; <time class="tag-quote__quoted-time" datetime="2011-09-02T03:26:03+00:00">02.09.11, 03:26</time></span><div class='quote '>а если D1=17:00:00, а D2 = 18:00:00</div></div><br>
Приведи точное время, хотя бы с точностью до микросекунды, а еще лучше все 15 знаков.</div></div><br>
Да с этим все понятно.<br>
Просто думал удобнее будет с TDateTime работать и модулем DateUtils...<br>
А оказалось проще делать все с  TTimeStamp все делать...<br>
Давно просто не работал с Delphi и многое забыть успел )))]]></description>
        <author>agesandr</author>
        <category>Delphi: Общие вопросы</category>
      </item>
	
      <item>
        <guid isPermaLink='true'>https://forum.sources.ru/index.php?showtopic=339658&amp;view=findpost&amp;p=2977781</guid>
        <pubDate>Fri, 02 Sep 2011 14:55:16 +0000</pubDate>
        <title>Ошибка в вычислениях в модуле DateUtils</title>
        <link>https://forum.sources.ru/index.php?showtopic=339658&amp;view=findpost&amp;p=2977781</link>
        <description><![CDATA[Anatoly Podgoretsky: <div class='tag-quote'><a class='tag-quote-link' href='https://forum.sources.ru/index.php?showtopic=339658&view=findpost&p=2977319'><span class='tag-quote-prefix'>Цитата</span></a> <span class='tag-quote__quote-info'>agesandr &#064; <time class="tag-quote__quoted-time" datetime="2011-09-02T03:26:03+00:00">02.09.11, 03:26</time></span><div class='quote '>а если D1=17:00:00, а D2 = 18:00:00</div></div><br>
Приведи точное время, хотя бы с точностью до микросекунды, а еще лучше все 15 знаков.]]></description>
        <author>Anatoly Podgoretsky</author>
        <category>Delphi: Общие вопросы</category>
      </item>
	
      <item>
        <guid isPermaLink='true'>https://forum.sources.ru/index.php?showtopic=339658&amp;view=findpost&amp;p=2977381</guid>
        <pubDate>Fri, 02 Sep 2011 06:23:40 +0000</pubDate>
        <title>Ошибка в вычислениях в модуле DateUtils</title>
        <link>https://forum.sources.ru/index.php?showtopic=339658&amp;view=findpost&amp;p=2977381</link>
        <description><![CDATA[leo: Резюме - дело не в модуле DateUtils, а в представлении TDateTime в виде вещественного числа double, в котором невозможно абсолютно точно представить казалось бы &quot;круглые&quot; цифры типа 17:00:00. Тех, кто это понимает и учитывает, вещественный формат вполне устраивает. И модуль DateUtils сделан с учетом этого: хочешь обрезать дроби - юзай функции ..Between, хочешь с дробями - юзай ..Span и дальше по усмотрению round, trunc или ва-аще sin&#092;cos ;)]]></description>
        <author>leo</author>
        <category>Delphi: Общие вопросы</category>
      </item>
	
      <item>
        <guid isPermaLink='true'>https://forum.sources.ru/index.php?showtopic=339658&amp;view=findpost&amp;p=2977376</guid>
        <pubDate>Fri, 02 Sep 2011 06:17:42 +0000</pubDate>
        <title>Ошибка в вычислениях в модуле DateUtils</title>
        <link>https://forum.sources.ru/index.php?showtopic=339658&amp;view=findpost&amp;p=2977376</link>
        <description><![CDATA[agesandr: <div class='tag-quote'><a class='tag-quote-link' href='https://forum.sources.ru/index.php?showtopic=339658&view=findpost&p=2977367'><span class='tag-quote-prefix'>Цитата</span></a> <span class='tag-quote__quote-info'>leo &#064; <time class="tag-quote__quoted-time" datetime="2011-09-02T05:57:06+00:00">02.09.11, 05:57</time></span><div class='quote '>Время это в принципе вещь неточная и приблизительная, тем более когда речь идет об округлении к часам, минутам и т.п. И круглые цифры типа 17:00:00:000 и 18:00:00:000 - это чистые абстракции, которые можно получить только через EncodeTime, а любое реальное время всегда определяется с некоторой погрешностью и соотв-но работать с ним нужно по правилам вещественных чисел - через round-ы и т.п. А если тебя это не устраивает, то и незачем юзать вещественный тип TDateTime - работай с целочисленными TSystemTime и TTimeStamp</div></div><br>
Вот за TSystemTime и TTimeStamp спасибо огромное )))<br>
Совсем про них забыл ... Помнил только TDateTime...<br>
Вот что значит много на PHP работать )))<br>
Буду дальше колупать...]]></description>
        <author>agesandr</author>
        <category>Delphi: Общие вопросы</category>
      </item>
	
      <item>
        <guid isPermaLink='true'>https://forum.sources.ru/index.php?showtopic=339658&amp;view=findpost&amp;p=2977367</guid>
        <pubDate>Fri, 02 Sep 2011 05:57:06 +0000</pubDate>
        <title>Ошибка в вычислениях в модуле DateUtils</title>
        <link>https://forum.sources.ru/index.php?showtopic=339658&amp;view=findpost&amp;p=2977367</link>
        <description><![CDATA[leo: Время это в принципе вещь неточная и приблизительная, тем более когда речь идет об округлении к часам, минутам и т.п. И круглые цифры типа 17:00:00:000 и 18:00:00:000 - это чистые абстракции, которые можно получить только через EncodeTime, а любое реальное время всегда определяется с некоторой погрешностью и соотв-но работать с ним нужно по правилам вещественных чисел - через round-ы и т.п. А если тебя это не устраивает, то и незачем юзать вещественный тип TDateTime - работай с целочисленными TSystemTime и TTimeStamp]]></description>
        <author>leo</author>
        <category>Delphi: Общие вопросы</category>
      </item>
	
      <item>
        <guid isPermaLink='true'>https://forum.sources.ru/index.php?showtopic=339658&amp;view=findpost&amp;p=2977365</guid>
        <pubDate>Fri, 02 Sep 2011 05:52:42 +0000</pubDate>
        <title>Ошибка в вычислениях в модуле DateUtils</title>
        <link>https://forum.sources.ru/index.php?showtopic=339658&amp;view=findpost&amp;p=2977365</link>
        <description><![CDATA[Fr0sT: Сам неоднократно сталкивался с такими &quot;глюками&quot;. Увы, ничего лучше с существующим видом TDateTime придумать нельзя :(. Вот если бы оно было по принципу FILETIME (два DWORD), тогда всё было бы наишоколаднейше. А так - приходится извращаться. <br>
<br>
<span class="tag-color tag-color-named" data-value="gray" style="color: gray"><span class='tag-size' data-value='7' style='font-size:7pt;'>Добавлено <time class="tag-mergetime" datetime="2011-09-02T05:53:40+00:00">02.09.11, 05:53</time></span></span><br>
<div class='tag-quote'><a class='tag-quote-link' href='https://forum.sources.ru/index.php?showtopic=339658&view=findpost&p=2977362'><span class='tag-quote-prefix'>Цитата</span></a> <span class='tag-quote__quote-info'>agesandr &#064; <time class="tag-quote__quoted-time" datetime="2011-09-02T05:49:23+00:00">02.09.11, 05:49</time></span><div class='quote '>Глючные функции и модуль</div></div><br>
&quot;Глючное&quot; само представление. Вернее, это багофича, а еще вернее - фича, которая приводит к багам.]]></description>
        <author>Fr0sT</author>
        <category>Delphi: Общие вопросы</category>
      </item>
	
      <item>
        <guid isPermaLink='true'>https://forum.sources.ru/index.php?showtopic=339658&amp;view=findpost&amp;p=2977362</guid>
        <pubDate>Fri, 02 Sep 2011 05:49:23 +0000</pubDate>
        <title>Ошибка в вычислениях в модуле DateUtils</title>
        <link>https://forum.sources.ru/index.php?showtopic=339658&amp;view=findpost&amp;p=2977362</link>
        <description><![CDATA[agesandr: Читал справку и примеры смотрел.<br>Вот сколько часов должно быть между 17:00:00 и 18:00:00??<br>Один час вроде бы... но никак не ноль.<br>Глючные функции и модуль.]]></description>
        <author>agesandr</author>
        <category>Delphi: Общие вопросы</category>
      </item>
	
      <item>
        <guid isPermaLink='true'>https://forum.sources.ru/index.php?showtopic=339658&amp;view=findpost&amp;p=2977359</guid>
        <pubDate>Fri, 02 Sep 2011 05:45:13 +0000</pubDate>
        <title>Ошибка в вычислениях в модуле DateUtils</title>
        <link>https://forum.sources.ru/index.php?showtopic=339658&amp;view=findpost&amp;p=2977359</link>
        <description><![CDATA[leo: <div class='tag-quote'><a class='tag-quote-link' href='https://forum.sources.ru/index.php?showtopic=339658&view=findpost&p=2977352'><span class='tag-quote-prefix'>Цитата</span></a> <span class='tag-quote__quote-info'>agesandr &#064; <time class="tag-quote__quoted-time" datetime="2011-09-02T05:26:22+00:00">02.09.11, 05:26</time></span><div class='quote '>Вообще непонятно как с модулем раньше работали и работают, если он точно ничего не определяет...</div></div><br>
Справку нужно внимательно читать :rtfm:]]></description>
        <author>leo</author>
        <category>Delphi: Общие вопросы</category>
      </item>
	
      <item>
        <guid isPermaLink='true'>https://forum.sources.ru/index.php?showtopic=339658&amp;view=findpost&amp;p=2977352</guid>
        <pubDate>Fri, 02 Sep 2011 05:26:22 +0000</pubDate>
        <title>Ошибка в вычислениях в модуле DateUtils</title>
        <link>https://forum.sources.ru/index.php?showtopic=339658&amp;view=findpost&amp;p=2977352</link>
        <description><![CDATA[agesandr: Да про Round() я уже думал.<br>
Вообще непонятно как с модулем раньше работали и работают, если он точно ничего не определяет...<br>
Ведь как панацея на форумах пишется.<br>
Я уже и код под это дело набацал...<br>
Сейчас все переделывать придется   :rtfm: <br>
На PHP и Perl я с таким не сталкивался.. <br>
<br>
<span class="tag-color tag-color-named" data-value="gray" style="color: gray"><span class='tag-size' data-value='7' style='font-size:7pt;'>Добавлено <time class="tag-mergetime" datetime="2011-09-02T05:44:35+00:00">02.09.11, 05:44</time></span></span><br>
Вердикт однозначный. Для расчетов с временем использовать модуль DateUtils в принципе нельзя.<br>
Точности нет. И это в датах-то...<br>
Выход нашел.<br>
Надо было количество часов получать между датами.<br>
Получаю округленное количество секунд round(SecondSpan(D1,D2))и делю на 3600.<br>
Лучшего пока-что не придумал.<br>
А функцию HoursBetween для этого не подходит.]]></description>
        <author>agesandr</author>
        <category>Delphi: Общие вопросы</category>
      </item>
	
      <item>
        <guid isPermaLink='true'>https://forum.sources.ru/index.php?showtopic=339658&amp;view=findpost&amp;p=2977343</guid>
        <pubDate>Fri, 02 Sep 2011 05:09:53 +0000</pubDate>
        <title>Ошибка в вычислениях в модуле DateUtils</title>
        <link>https://forum.sources.ru/index.php?showtopic=339658&amp;view=findpost&amp;p=2977343</link>
        <description><![CDATA[leo: Во-первых, глянь в описание - SecondsBetween возвращает целое число секунд в интервале, т.е. не округляет, а обрезает рез-т до целого (несмотря на остаток миллисекунд 0.999..). Во-вторых, время в TDateTime хранится в виде дробной части суток в формате double и соот-но, как при любой работе с вещественными числами, при представлении дробей могут возникать &quot;микроскопические&quot; погрешности, связанные с ограниченной разрядностью представления мантиссы числа. Вот у тебя и получается разница в 3599.999.., которую SecondsBetween обрезает до целого числа 3599. Если тебе нужно не обрезать, а округлять секунды, то юзай<br>round(SecondSpan(D1,D2));]]></description>
        <author>leo</author>
        <category>Delphi: Общие вопросы</category>
      </item>
	
      <item>
        <guid isPermaLink='true'>https://forum.sources.ru/index.php?showtopic=339658&amp;view=findpost&amp;p=2977330</guid>
        <pubDate>Fri, 02 Sep 2011 04:30:38 +0000</pubDate>
        <title>Ошибка в вычислениях в модуле DateUtils</title>
        <link>https://forum.sources.ru/index.php?showtopic=339658&amp;view=findpost&amp;p=2977330</link>
        <description><![CDATA[agesandr: Пошарил по коду DateUtils и получается, что ошибка закрадывается при отнимании от одной даты другой...<br>вот тут:<br><br>function SpanOfNowAndThen(const ANow, AThen: TDateTime): TDateTime;<br>begin<br>  if ANow &lt; AThen then<br>    Result := AThen - ANow<br>  else<br>    Result := ANow - AThen;<br>end;<br><br>В другом месте ошибке взяться вроде неоткуда...]]></description>
        <author>agesandr</author>
        <category>Delphi: Общие вопросы</category>
      </item>
	
      <item>
        <guid isPermaLink='true'>https://forum.sources.ru/index.php?showtopic=339658&amp;view=findpost&amp;p=2977319</guid>
        <pubDate>Fri, 02 Sep 2011 03:26:03 +0000</pubDate>
        <title>Ошибка в вычислениях в модуле DateUtils</title>
        <link>https://forum.sources.ru/index.php?showtopic=339658&amp;view=findpost&amp;p=2977319</link>
        <description><![CDATA[agesandr: Всем доброго времени суток.<br>Обнаружил интересную ошибку(может фича такая) при вычислении количества часов, минут, секунд между датами и временем...<br>использовал функции из модуля DateUtils:<br>HoursBetween, MinutesBetween, SecondsBetween.<br><br>var <br>  D1,D2: TDateTime;<br>begin<br>  D1 := StrToTime(Edit1.text);<br>  D2 := StrToTime(Edit2.text);<br>  Edit3.text := IntToStr(SecondsBetween(D1,D2));<br>end;<br><br>например, если D1 = 13:00:00, а D2 = 14:00:00, то все нормально(3600 секунд между ними)<br>а если D1=17:00:00, а D2 = 18:00:00 , то между ними 3599 секунд.<br>Соответственно функция HoursBetween выдает 0 часов.<br><br>И как с этим работать дальше ???<br>Кто сталкивался - пишите варианты решения...]]></description>
        <author>agesandr</author>
        <category>Delphi: Общие вопросы</category>
      </item>
	
      </channel>
      </rss>
	