Berechnen der zeit anhand eines zeit und datum strings



  • ich konnts nicht sein lassen. nach scharfem überlegen wurde mir klar das ich ja nur seconds jedesmal in der else-anweisung inkrementieren muss. wenn die allererste if-anweisung bzw. die bedingung dann erfüllt wurd bricht die schleife ab und seconds wurde so oft mal inkrementiert wie die differenz eben schlussendlich ist.

    habs also nun hinbekommen. danke ZuK für deine unterstützung! hier noch mein fertiger code. ist dieser ok so?

    int CalculateSeconds()
    {
    	int act_day = 25;
        int act_month = 9;
        int act_year = 2005;
    
    	int act_hour = 23;
        int act_minute = 50;
        int act_second = 5;
    
    	int to_day = 26;
        int to_month = 9;
        int to_year = 2005;
    
    	int to_hour = 2;
        int to_minute = 50;
        int to_second = 5;
    
        int seconds = 0;
    
    	while(true)
        {
        	if(act_day == to_day && act_month == to_month && act_year == to_year &&
               act_hour == to_hour && act_minute == to_minute && act_second == to_second)
            {
                return seconds;
            }
            else
            {
                seconds++;
            	if(act_second < 59)
                {
                	act_second++;
                }
                else
                {
                	act_second = 0;
                    if(act_minute == 59)
                    {
                    	act_minute = 0;
                    	if(act_hour == 23)
                    	{
                        	act_hour = 0;
                    		if(act_day == days_of_month(act_month, act_year))
                        	{
                            	if(act_month == 12)
                            	{
                            		act_day = 1;
                            		act_month = 1;
                                	act_year++;
                                	act_hour = 0;
                                	act_minute = 0;
                                	act_second = 0;
                            	}
                            	else
                            	{
                        			act_month++;
                                	act_day = 1;
                                	act_hour = 0;
                                	act_minute = 0;
                                	act_second = 0;
                            	}
                        	}
                        	else
                        	{
                    			act_day++;
                        	}
                    	}
                        else
                        {
                        	act_hour++;
                        }
                    }
                    else
                    {
                    	act_minute++;
                    }
                }
            }
        }
    }
    


  • Die Funktion ist eindeutig zu lang.



  • splitter schrieb:

    Die Funktion ist eindeutig zu lang.

    Und benutzt "Magic Numbers" 👎



  • Natürlich sollte das so funktionieren.
    Diese Version ist aber nicht sehr flexibel. Wenn du jetzt eine Funktion brauchst um zb eine bestimmte Zeitspanne zu einem Datum zu addieren oder zu subtrahieren dann musst du diese extra schreiben.
    Wenn du aber prinzipiell jedes Datum+ Uhrzeit in eine Anzahl von Sekunden seit einem bestimmten Anfangszeitpunkt umrechnest dann kannst du, wenn du zB die Differenz zwichen zwei Zeitpunkten brauchst, ganz einfach subtrahieren.Willst du das Datum plus eine Zeitspanne errechnen genügt eine Addition.
    Dann brauchst du nur noch eine Funktion um von diesem seriellen Datum wieder in einen Datum-Uhrzeitstring zurückzurechnen. Du hast also nur 2 komplexere Funktionen und kannst damit alle möglichen Datumsberechnungen abdecken.
    Das ganze würde ich dann noch in zwei Klassen date und timespan kapseln.
    Kurt



  • Also wenn Du mich fragst:

    Wenn Du die Differenz von zwei Daten in Sekunden haben willst, würde ich die
    Funktionen in time.h benutzen.
    Sind die einzelnen Komponenten der Daten z.B. 18.09.2005 14:00:00
    als integer Werte gegeben: int stunde = 14;
    usw....
    dann ist die Berechnung der Differenz in Sekunden ein Dreizeiler.

    Gruß,
    proggingmania



  • #include <time.h>
    #include <iostream>
    using namespace std;
    
    void main()
    {
        struct tm heute_14Uhr = { 0,  0, 14, 18, 8, 2005 - 1900};
        struct tm morgen_14Uhr = { 0,  0, 14, 19, 8, 2005 - 1900};
        cout<< "Differenz in Sekunden: "<< 
        difftime(mktime(&morgen_14Uhr),mktime(&heute_14Uhr)) << endl;        
    }
    


  • Wie wäre es mit boost::date_time ??

    MfG Spacelord


Anmelden zum Antworten