Problem mit dem DateTimePicker



  • Hallo zusammen,

    kann mir jemand sagen, wieso die folgende Funktion nicht funktioniert b.z.w. was für ein Fehler ich gemacht habe?

    date GetDateFromControl(HWND hDTP)
    {
      PSYSTEMTIME syst;
      tm *timeinfo;
    
      syst=(PSYSTEMTIME)LocalAlloc(LPTR,sizeof(SYSTEMTIME));
      SendMessage((HWND)hDTP,(UINT)DTM_GETSYSTEMTIME,0,(LPARAM)(LPSYSTEMTIME)syst);
      timeinfo=(tm *)malloc(sizeof(tm));
      timeinfo->tm_year=syst->wYear-1900;
      timeinfo->tm_mon=syst->wMonth-1;
      timeinfo->tm_mday=syst->wDay;
    
      return(mktime(timeinfo));
    }
    

    Der Funktion wird der DateTimePicker übergeben. "date" ist vom Typ time_t, wie er in "Time.h" definiert ist.

    Das Problem ist, dass der Rückgabewert nicht stimmt. Heute, am 3.12.2004, gibt er den 20.2.2013 züruck(Am 2.12.2004, den 19.2.2013).

    Bin für jeden Tipp und Anregung sehr dankbar!



  • date GetDateFromControl(HWND hDTP)
    {
      SYSTEMTIME syst; // pointer unnötig
      tm *timeinfo;
    
      SendMessage((HWND)hDTP,(UINT)DTM_GETSYSTEMTIME,0,(LPARAM)&syst);
      timeinfo=(tm *)malloc(sizeof(tm));
      timeinfo->tm_year=syst.wYear;  // -1900;  warum ?
      timeinfo->tm_mon=syst.wMonth;// -1; warum ?
      timeinfo->tm_mday=syst.wDay;
    
      return(mktime(timeinfo));
    }
    

    wo wird den der speicher von tm wieder freigegeben 😕



  • Deine beiden Fragen im Quelltext:

    - das Jahr bei der tm - Struktur ist ab dem Jahr 1900. Darum die -1900.
    - der Monat bei der tm - Struktur beginnt mit dem Index 0, deshalb die -1.

    Die freigebung des Speichers der tm - Struktur, wie auch der SYSTEMTIME - Struktur habe ich im Posting weggelassen.



  • DateTimePicker schrieb:

    - das Jahr bei der tm - Struktur ist ab dem Jahr 1900. Darum die -1900.

    übersetzt heisst dann nix anderes wie tm = 2004 - 1900 in tm steht dann 104
    aber warum machst du das?



  • Wie erwähnt beginnt die tm - Struktur beim Jahr 1900(nach ANSI-C), dass heisst tm_year ist im Jahr 2004 = 104.

    Siehe:
    http://www.cplusplus.com/ref/ctime/tm.html


Anmelden zum Antworten