zeitdifferenz berechnen



  • hi

    ich habe folgendes problem: ein programm soll die aktuelle systemzeit mit einem zeitpunkt vergleichen von dem jahr monat tag stunde und minute bekannt sind und dabei möglichst nur die winapi verwenden

    ich habe schon versucht den zeitpunkt in eine SYTEMTIME struktur zu schreiben (die aktuelle zeit habe ich sowieso als SYSTEMTIME) und dann die beiden werte in eine FILETIME umzuwandeln und mit CompareFileTime zu vergleichen.
    allerdings liefert dieser vergleich keine richtigen ergebnisse - liegt das evtl daran dass ich nicht alle werte der SYSTEMTIME struktur habe? also kann ich bspw wDayOfWeek nicht initialisieren

    wie könnte ich das problem anders lösen?
    schonmal vielen dank für eure antworten

    gruß



  • Zeig doch mal den Code! Eigentlich sollte es funktionieren...



  • SYSTEMTIME st;
         GetLocalTime (&st);
         FILETIME ft;
         SystemTimeToFileTime (&st, &ft);
    
         SYSTEMTIME stdate;
         FILETIME ftdate;
         stdate.wYear = date.wYear;
         stdate.wMonth = date.wMonth;
         stdate.wDay = date.wDay;
         stdate.wHour = date.wHour;
         stdate.wMinute = date.wMinute;
         SystemTimeToFileTime (&stdate, &ftdate);
    
         if (CompareFileTime (&ft, &ftdate) <= 0)
         {
                              MessageBox (hWnd, 
                                         "Uhrzeit erreicht oder überschritten", 
                                         "Termin", 
                                         MB_OK);
                              date.iWarn = 0;
         }
    

    date ist eine selbstdefinierte struktur in der unter anderem der zeitpunkt gespeichert ist



  • Naja... ich würde eher mal sagen, dass Dein Vergleich falsch rum ist....
    Das folgende geht bei mir Problemlos:

    #include <windows.h>
    #include <tchar.h>
    #pragma comment(lib, "user32.lib")
    
    void _tmain()
    {
      SYSTEMTIME st;
      GetLocalTime (&st);
      FILETIME ft;
      SystemTimeToFileTime (&st, &ft);
    
      SYSTEMTIME stdate;
      ZeroMemory(&stdate, sizeof(SYSTEMTIME));
      FILETIME ftdate;
      stdate.wYear = 2006;
      stdate.wMonth = 2;
      stdate.wDay = 28;
      stdate.wHour = 13;
      stdate.wMinute = 50;
      SystemTimeToFileTime (&stdate, &ftdate);
      if (CompareFileTime (&ftdate, &ft) <= 0)
      {
        MessageBox(NULL,
          _T("Uhrzeit erreicht oder überschritten"),
          _T("Termin"),
          MB_OK);
      }
    }
    

Anmelden zum Antworten