<?xml version="1.0" encoding="UTF-8"?><rss xmlns:dc="http://purl.org/dc/elements/1.1/" xmlns:content="http://purl.org/rss/1.0/modules/content/" xmlns:atom="http://www.w3.org/2005/Atom" version="2.0"><channel><title><![CDATA[Funktion DateDiff() in WinApi?]]></title><description><![CDATA[<p>In VB gibt es eine Funktion Namens DateDiff(...); die die Differenz zweier Datums oder Zeitangaben berechnet. Gibt es sowas auch für C++ in WinApi?<br />
Also um genau zu seien bräuchte ich sowas <img
      src="https://www.c-plusplus.net/forum/plugins/nodebb-plugin-emoji/emoji/emoji-one/1f609.png?v=ab1pehoraso"
      class="not-responsive emoji emoji-emoji-one emoji--winking_face"
      title=";)"
      alt="😉"
    /></p>
<pre><code>Public Function DateID(DatTage As Date) As Long
DateID = Abs(DateDiff(&quot;d&quot;, DatTage, &quot;31.12.1899&quot;))    'Ausgabe der Differenz der Tage
End Function
</code></pre>
<p>MfG schirrmie</p>
]]></description><link>https://www.c-plusplus.net/forum/topic/157864/funktion-datediff-in-winapi</link><generator>RSS for Node</generator><lastBuildDate>Wed, 22 Jul 2026 11:42:16 GMT</lastBuildDate><atom:link href="https://www.c-plusplus.net/forum/topic/157864.rss" rel="self" type="application/rss+xml"/><pubDate>Wed, 30 Aug 2006 08:17:24 GMT</pubDate><ttl>60</ttl><item><title><![CDATA[Reply to Funktion DateDiff() in WinApi? on Wed, 30 Aug 2006 08:17:24 GMT]]></title><description><![CDATA[<p>In VB gibt es eine Funktion Namens DateDiff(...); die die Differenz zweier Datums oder Zeitangaben berechnet. Gibt es sowas auch für C++ in WinApi?<br />
Also um genau zu seien bräuchte ich sowas <img
      src="https://www.c-plusplus.net/forum/plugins/nodebb-plugin-emoji/emoji/emoji-one/1f609.png?v=ab1pehoraso"
      class="not-responsive emoji emoji-emoji-one emoji--winking_face"
      title=";)"
      alt="😉"
    /></p>
<pre><code>Public Function DateID(DatTage As Date) As Long
DateID = Abs(DateDiff(&quot;d&quot;, DatTage, &quot;31.12.1899&quot;))    'Ausgabe der Differenz der Tage
End Function
</code></pre>
<p>MfG schirrmie</p>
]]></description><link>https://www.c-plusplus.net/forum/post/1127380</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/1127380</guid><dc:creator><![CDATA[schirrmie]]></dc:creator><pubDate>Wed, 30 Aug 2006 08:17:24 GMT</pubDate></item><item><title><![CDATA[Reply to Funktion DateDiff() in WinApi? on Wed, 30 Aug 2006 08:23:22 GMT]]></title><description><![CDATA[<p>So eine einfache Funktion gibt es da nicht. Du musst AFAIK:<br />
- die beiden Datumswerte voin SYSTEMTIME nach FILETIME umwandeln (SystemTimeToFileTime)<br />
- dann die beiden FILETIME-Werte in jeweils einen ULARGE_INTEGER kopieren (siehe Hilfe zu FILETIME)<br />
- dann diese beiden ULARGE_INTEGER voneinander abziehen<br />
- dann dieses wieder zurück in eine SYSTEMTIME umwandeln (FileTimeToSystemTime) oder von Hand die Anzahl der Tage aus dem FILETIME ausrechnen</p>
]]></description><link>https://www.c-plusplus.net/forum/post/1127387</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/1127387</guid><dc:creator><![CDATA[Jochen Kalmbach]]></dc:creator><pubDate>Wed, 30 Aug 2006 08:23:22 GMT</pubDate></item><item><title><![CDATA[Reply to Funktion DateDiff() in WinApi? on Wed, 30 Aug 2006 08:38:30 GMT]]></title><description><![CDATA[<p>Hmm das klingt ja schon mal vielversprechend.<br />
Aber wie bekomme ich das hin mit dem 31.12.1899? Mit SetSystemTime? Ich will ja aber nicht das Datum meines Rechners ändern?</p>
<p>MfG schirrmie</p>
]]></description><link>https://www.c-plusplus.net/forum/post/1127399</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/1127399</guid><dc:creator><![CDATA[schirrmie]]></dc:creator><pubDate>Wed, 30 Aug 2006 08:38:30 GMT</pubDate></item><item><title><![CDATA[Reply to Funktion DateDiff() in WinApi? on Wed, 30 Aug 2006 09:11:16 GMT]]></title><description><![CDATA[<p>schirrmie schrieb:</p>
<blockquote>
<p>Aber wie bekomme ich das hin mit dem 31.12.1899? Mit SetSystemTime? Ich will ja aber nicht das Datum meines Rechners ändern?</p>
</blockquote>
<p>Äh....</p>
<pre><code class="language-cpp">SYSTEMTIME st;
  ZeroMemory(&amp;st, sizeof(SYSTEMTIME));
  st.wYear = 1899;
  st.wMonth = 12;
  st.wDay = 31;
</code></pre>
<p>?</p>
]]></description><link>https://www.c-plusplus.net/forum/post/1127433</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/1127433</guid><dc:creator><![CDATA[Jochen Kalmbach]]></dc:creator><pubDate>Wed, 30 Aug 2006 09:11:16 GMT</pubDate></item><item><title><![CDATA[Reply to Funktion DateDiff() in WinApi? on Wed, 30 Aug 2006 10:45:44 GMT]]></title><description><![CDATA[<p>Hmm da hab ich wohl wieder zu weit gedacht <img
      src="https://www.c-plusplus.net/forum/plugins/nodebb-plugin-emoji/emoji/emoji-one/1f603.png?v=ab1pehoraso"
      class="not-responsive emoji emoji-emoji-one emoji--grinning_face_with_big_eyes"
      title=":D"
      alt="😃"
    /><br />
Danke <img
      src="https://www.c-plusplus.net/forum/plugins/nodebb-plugin-emoji/emoji/emoji-one/1f44d.png?v=ab1pehoraso"
      class="not-responsive emoji emoji-emoji-one emoji--thumbs_up"
      title=":+1:"
      alt="👍"
    /></p>
]]></description><link>https://www.c-plusplus.net/forum/post/1127450</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/1127450</guid><dc:creator><![CDATA[schirrmie]]></dc:creator><pubDate>Wed, 30 Aug 2006 10:45:44 GMT</pubDate></item><item><title><![CDATA[Reply to Funktion DateDiff() in WinApi? on Wed, 30 Aug 2006 12:11:09 GMT]]></title><description><![CDATA[<p>Wenn es sich um ein DATE Feld handelt kann man die Doubles einfach voneinander abziehen. Der Ganzzahlige Anteil sind Tage. Alles &lt;1 ist der Brauchteil des Tages.<br />
COleDateTime kapselt die ganze Sosse. IMHO ist das Rechnen damit extremst einfacher als SYSTEMTIME etc.</p>
]]></description><link>https://www.c-plusplus.net/forum/post/1127524</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/1127524</guid><dc:creator><![CDATA[Martin Richter]]></dc:creator><pubDate>Wed, 30 Aug 2006 12:11:09 GMT</pubDate></item><item><title><![CDATA[Reply to Funktion DateDiff() in WinApi? on Wed, 30 Aug 2006 13:03:10 GMT]]></title><description><![CDATA[<p>Also ich bin jetzt schon ziemlich weiter (denk ich ;)) und es sieht so aus.</p>
<pre><code>int cSEdit::DateID(SYSTEMTIME st1)
{
	FILETIME ft1, ft2;
	LARGE_INTEGER li;
	SYSTEMTIME st2;
	ZeroMemory(&amp;st2, sizeof(SYSTEMTIME));
	st2.wYear	= 1899;
	st2.wMonth	= 12;
	st2.wDay	= 31;
	SystemTimeToFileTime(&amp;st1, &amp;ft1);
	SystemTimeToFileTime(&amp;st2, &amp;ft2);

	li.LowPart  = ft2.dwLowDateTime;
	li.HighPart = ft2.dwHighDateTime;

	((LARGE_INTEGER*)&amp;ft1)-&gt;QuadPart -= li.QuadPart;
	FileTimeToSystemTime(&amp;ft1, &amp;st1);
	return 0;
}
</code></pre>
<p>Ich komm nur nicht mit der letzten Berechnung klar.<br />
Also wenn ich den heutigen Tag eingeben steht in st1 dann der 01.09.1707 drinn. Bloß wie bekomm ich die Differenz? Sie müsste 38958 sein?</p>
<p>MfG schirrmie</p>
]]></description><link>https://www.c-plusplus.net/forum/post/1127586</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/1127586</guid><dc:creator><![CDATA[schirrmie]]></dc:creator><pubDate>Wed, 30 Aug 2006 13:03:10 GMT</pubDate></item><item><title><![CDATA[Reply to Funktion DateDiff() in WinApi? on Wed, 30 Aug 2006 13:09:14 GMT]]></title><description><![CDATA[<p>Das geht nicht. Du kannst die Differenz doch nicht einfach wieder zurückverwandeln in ein Datum!</p>
<p>Zitat:<br />
The FILETIME data structure is a 64-bit value representing the number of 100-nanosecond intervals since January 1, 1601</p>
<p>Du musst den erhaltenen Wert entsprechend dividieren um die Anzahl derTage zu erhalten.<br />
Ich kann mich nur wiederholen. Die Arithmetik mit DATE/COleDateTime ist weitaus einfacher!</p>
]]></description><link>https://www.c-plusplus.net/forum/post/1127592</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/1127592</guid><dc:creator><![CDATA[Martin Richter]]></dc:creator><pubDate>Wed, 30 Aug 2006 13:09:14 GMT</pubDate></item><item><title><![CDATA[Reply to Funktion DateDiff() in WinApi? on Wed, 30 Aug 2006 13:20:47 GMT]]></title><description><![CDATA[<p>Hast recht, so wie das in der MSDN aussieht ist das genau das was ich brauche. Also danke nochmal.</p>
]]></description><link>https://www.c-plusplus.net/forum/post/1127612</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/1127612</guid><dc:creator><![CDATA[schirrmie]]></dc:creator><pubDate>Wed, 30 Aug 2006 13:20:47 GMT</pubDate></item><item><title><![CDATA[Reply to Funktion DateDiff() in WinApi? on Wed, 30 Aug 2006 13:31:52 GMT]]></title><description><![CDATA[<p>Die reine WinAPI-Variante sieht so aus:</p>
<pre><code class="language-cpp">#include &lt;windows.h&gt;
#include &lt;tchar.h&gt;

DWORD DiffInDays(SYSTEMTIME st1, SYSTEMTIME st2)
{
  FILETIME ft1, ft2;
  SystemTimeToFileTime(&amp;st1, &amp;ft1);
  SystemTimeToFileTime(&amp;st2, &amp;ft2);

  LARGE_INTEGER li1;
  li1.LowPart  = ft1.dwLowDateTime;
  li1.HighPart = ft1.dwHighDateTime;
  LARGE_INTEGER li2;
  li2.LowPart  = ft2.dwLowDateTime;
  li2.HighPart = ft2.dwHighDateTime;

  LARGE_INTEGER li3;
  li3.QuadPart = li1.QuadPart - li2.QuadPart;

  li3.QuadPart /= 10; // =&gt; now us
  li3.QuadPart /= 1000; // now ms
  li3.QuadPart /= 1000; // now sec
  li3.QuadPart /= 60; // now min
  li3.QuadPart /= 60; // now h
  li3.QuadPart /= 24; // now days

  return li3.LowPart; 
}

int _tmain()
{
  SYSTEMTIME st1;
  ZeroMemory(&amp;st1, sizeof(SYSTEMTIME));
  st1.wYear = 1990;
  st1.wMonth = 1;
  st1.wDay = 10;

  SYSTEMTIME st2;
  ZeroMemory(&amp;st2, sizeof(SYSTEMTIME));
  st2.wYear = 1990;
  st2.wMonth = 1;
  st2.wDay = 1;

  _tprintf(_T(&quot;%d&quot;), DiffInDays(st1, st2)); 
  return 0;
}
</code></pre>
<p>Die MFC/COM Variante sieht so aus:</p>
<pre><code class="language-cpp">COleDateTime dt1(1990, 1, 1, 0, 0, 0);
  COleDateTime dt2(1990, 1, 10, 0, 0, 0);

  COleDateTimeSpan diff;
  diff = dt2 - dt1;
  _tprintf(szTest, _T(&quot;%d&quot;), (DWORD) diff.GetTotalDays());
</code></pre>
<p>Die MFC/ATL Variante sieht so aus:</p>
<pre><code class="language-cpp">CTime dt1(1990, 1, 1, 0, 0, 0);
  CTime dt2(1990, 1, 10, 0, 0, 0);

  CTimeSpan diff;
  diff = dt2 - dt1;
  TCHAR szTest[100];
  _stprintf(szTest, _T(&quot;%d&quot;), (DWORD) diff.GetDays());
</code></pre>
<p>Und die WinAPI/COM Variante sieht so aus:</p>
<pre><code class="language-cpp">DWORD DiffInDays(SYSTEMTIME st1, SYSTEMTIME st2)
{
  DOUBLE dbl1;
  SystemTimeToVariantTime(&amp;st1, &amp;dbl1);
  DOUBLE dbl2;
  SystemTimeToVariantTime(&amp;st2, &amp;dbl2);

  DOUBLE diff = dbl1 - dbl2;
  return (DWORD) diff;
}

int _tmain()
{
  SYSTEMTIME st1;
  ZeroMemory(&amp;st1, sizeof(SYSTEMTIME));
  st1.wYear = 1990;
  st1.wMonth = 1;
  st1.wDay = 10;

  SYSTEMTIME st2;
  ZeroMemory(&amp;st2, sizeof(SYSTEMTIME));
  st2.wYear = 1990;
  st2.wMonth = 1;
  st2.wDay = 1;

  _tprintf(_T(&quot;%d&quot;), DiffInDays(st1, st2)); 
  return 0;
}
</code></pre>
]]></description><link>https://www.c-plusplus.net/forum/post/1127629</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/1127629</guid><dc:creator><![CDATA[Jochen Kalmbach]]></dc:creator><pubDate>Wed, 30 Aug 2006 13:31:52 GMT</pubDate></item><item><title><![CDATA[Reply to Funktion DateDiff() in WinApi? on Wed, 30 Aug 2006 14:16:43 GMT]]></title><description><![CDATA[<p>Ein herzlichen Dank an alle die mir geholfen haben. Nu kann ich mir ja eine Lösung aussuchen <img
      src="https://www.c-plusplus.net/forum/plugins/nodebb-plugin-emoji/emoji/emoji-one/1f609.png?v=ab1pehoraso"
      class="not-responsive emoji emoji-emoji-one emoji--winking_face"
      title=";)"
      alt="😉"
    /></p>
<p>MfG schirrmie</p>
]]></description><link>https://www.c-plusplus.net/forum/post/1127664</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/1127664</guid><dc:creator><![CDATA[schirrmie]]></dc:creator><pubDate>Wed, 30 Aug 2006 14:16:43 GMT</pubDate></item></channel></rss>