Datumsdifferenzen berechnen.



  • Hi,

    Mal angenommen, ich hab 2 Daten, den 11.3. um 12:05 und denn 2.4. um 11:20, muss man die Tage da "manuell" durchgehen, oder gibts da eine einfachere Methode um z.B. die Minuten zwischen den Daten zu berechnen?



  • ..



  • Waren keine Code-Tags mehr da? 🙄



  • In c++ in etwas so

    string  Datum::diffsec(string beginn,string ende)
    {
    
    time_t tbeginn,tende;
    struct tm stbeginn;
    struct tm stende;
    
    stbeginn.tm_year = atoi(beginn.substr(0,4).c_str())-1900;
    stbeginn.tm_mon = atoi(beginn.substr(5,2).c_str())-1;
    stbeginn.tm_mday = atoi(beginn.substr(8,2).c_str());
    stbeginn.tm_hour = atoi(beginn.substr(11,2).c_str());
    stbeginn.tm_min = atoi(beginn.substr(14,2).c_str());
    stbeginn.tm_sec = atoi(beginn.substr(17,2).c_str());
    
    stende.tm_year = atoi(ende.substr(0,4).c_str())-1900;
    stende.tm_mon = atoi(ende.substr(5,2).c_str())-1;
    stende.tm_mday = atoi(ende.substr(8,2).c_str());
    stende.tm_hour = atoi(ende.substr(11,2).c_str());
    stende.tm_min = atoi(ende.substr(14,2).c_str());
    stende.tm_sec = atoi(ende.substr(17,2).c_str());
    
    tbeginn = mktime(&stbeginn);
    tende = mktime(&stende);
    
    stringstream tempsek;
    tempsek << difftime(tende,tbeginn);
    
    return tempsek.str();
    }
    

    In C return der Sekunden

    int sqldiffsec(char *beginn,char *ende)
    {
    
    time_t tbeginn,tende;
    struct tm stbeginn;
    struct tm stende;
    char tempstr[10];
    int jahr = 0,monat = 0,tag = 0,stunde = 0,minute = 0,sekunde = 0;
    
    jahr = atoi(teilstring(tempstr,beginn,1,4))-1900;
    monat = atoi(teilstring(tempstr,beginn,6,2))-1;
    tag = atoi(teilstring(tempstr,beginn,9,2));
    stunde = atoi(teilstring(tempstr,beginn,12,2));
    minute = atoi(teilstring(tempstr,beginn,15,2));
    sekunde = atoi(teilstring(tempstr,beginn,18,2));
    
    stbeginn.tm_year = jahr;
    stbeginn.tm_mon = monat;
    stbeginn.tm_mday = tag;
    stbeginn.tm_hour = stunde;
    stbeginn.tm_min = minute;
    stbeginn.tm_sec = sekunde;
    
    jahr = atoi(teilstring(tempstr,ende,1,4))-1900;
    monat = atoi(teilstring(tempstr,ende,6,2))-1;
    tag = atoi(teilstring(tempstr,ende,9,2));
    stunde = atoi(teilstring(tempstr,ende,12,2));
    minute = atoi(teilstring(tempstr,ende,15,2));
    sekunde = atoi(teilstring(tempstr,ende,18,2));
    
    stende.tm_year = jahr;
    stende.tm_mon = monat;
    stende.tm_mday = tag;
    stende.tm_hour = stunde;
    stende.tm_min = minute;
    stende.tm_sec = sekunde;
    tbeginn = mktime(&stbeginn);
    tende = mktime(&stende);
    return difftime(tende,tbeginn);
    }
    

    In MFC

    CString CDatumclass::diffsec(CString beginn, CString ende)
    {
        AFX_MANAGE_STATE(AfxGetStaticModuleState());
    
        int jahrb = atoi(beginn.Left(4));
        int monatb = atoi(beginn.Mid(5,2));
        int tagb = atoi(beginn.Mid(8,2));
        int stundeb = atoi(beginn.Mid(11,2));
        int minuteb = atoi(beginn.Mid(14,2));
        int sekundeb = atoi(beginn.Mid(17,2));
        CTime startTime(jahrb,monatb,tagb,stundeb,minuteb,sekundeb);
    
        int jahre = atoi(ende.Left(4));
        int monate = atoi(ende.Mid(5,2));
        int tage = atoi(ende.Mid(8,2));
        int stundee = atoi(ende.Mid(11,2));
        int minutee = atoi(ende.Mid(14,2));
        int sekundee = atoi(ende.Mid(17,2));
        CTime endTime(jahre,monate,tage,stundee,minutee,sekundee);
        CTimeSpan elapsedTime = endTime - startTime;
        int sekunden = elapsedTime.GetTotalSeconds();
        CString endsekunden;
        endsekunden.Format("%i",sekunden);
        return endsekunden;  // Hier kann man auch die sekunden als int returnen
    }
    


  • ..



  • Wow, danke, das sollte mehr als genügen, wär vielleicht was für die FAQ



  • Bin hier nicht dafür zuständig und die Frage ist da auch Wohin. MFC,WINAPI,C++,ANSI-C
    Aber das muss ja kingruedi oder dEus entscheiden.

    [ Dieser Beitrag wurde am 12.01.2003 um 14:35 Uhr von Unix-Tom editiert. ]



  • Ich denke, man sollte es bei C++ einordnen, da man Hilfsklassen wie CString oder CTime ... problemlos mittels #include <afx.h> auch in Konsolen einsetzen kann, wie ich oben gezeigt habe.



  • Original erstellt von Erhard Henkes:
    Ich denke, man sollte es bei C++ einordnen, da man Hilfsklassen wie CString oder CTime ... problemlos mittels #include <afx.h> auch in Konsolen einsetzen kann, wie ich oben gezeigt habe.

    no !

    bei mfc, also im mfc forum oder hier ins faq



  • MFC wäre auch o.k. 🙂



  • Original erstellt von Erhard Henkes:
    Ich denke, man sollte es bei C++ einordnen, da man Hilfsklassen wie CString oder CTime ... problemlos mittels #include <afx.h> auch in Konsolen einsetzen kann, wie ich oben gezeigt habe.

    Und unter Linux? Ist CString nicht eine MFC-Klasse?

    Also ich fände auch das "Rund um..." am passendsten.


Anmelden zum Antworten