time_t aus Datum vor dem 01.01.1970



  • Hallo Community,

    ich habe da ein Problem mit einem Datum vor dem 01.01.1970.
    Folgendes Code-Snippet funktioniert wunderbar bei allen Datis, die dem 01.01.1970 nachfolgen. Bei Datis, die dem 01.01.1970 vorangehen liefert mktime() immer -1.
    Wie kann ich z. B. ein Geburtsdatum wie den 21.6.1946 in einen time_t umwandeln?

    #include <ctime>
    #include <iostream>
    
    using namespace std;
    int main(int argc, char *argv[]) {
    
    	// Soll aus dem 21.06.1946 einen time_t machen
    	tm tms = {0};	
    	tms.tm_mday = 21;
    	tms.tm_mon = 6 - 1;
    	tms.tm_year = 1946 - 1900;		
    
    	time_t t = mktime( &tms );
    	std::cout << t << std::endl;
    	std::cout << ctime( &t );
    
    	// Ausgabe:
    	// -1
    	// Mon Jun 21 00:00:00 1971
    }
    

    Gruß

    H.-Gerd



  • Balrog schrieb:

    Wie kann ich z. B. ein Geburtsdatum wie den 21.6.1946 in einen time_t umwandeln?

    Gar nicht. time_t ist nicht geeignet, um solche Daten darzustellen. Warum benutzt du nicht asctime?

    Übrigens: Was sind "Datis"?



  • MFK schrieb:

    Balrog schrieb:

    Wie kann ich z. B. ein Geburtsdatum wie den 21.6.1946 in einen time_t umwandeln?

    Gar nicht. time_t ist nicht geeignet, um solche Daten darzustellen. Warum benutzt du nicht asctime?

    Weil ich keine String-Repräsentation eines Datums benötige, sondern einen numerischen Wert. Mit dem läßt sich z. B. das Durchschnittsalters einer Personengruppe bestimmen.

    Und warum sollte ein time_t nicht geeignet sein, Werte jenseits des 01.01.1970 darzustellen? Ein time_t ist in aller Regel ein Signed Integer (ob 32- oder 64-bittig sei an dieser Stelle egal) und somit durchaus in der Lage negative Werte anzunehmen und ergo ein Datum vor dem 01.01.1970 zu sein.
    Beweis:

    time_t h = -1000000;
      std::cout << ctime( &h );
    

    liefert z. B. die Ausgabe "Sat Dec 20 11:13:20 1969". q. e. d.
    Ursache meines Problems ist also nicht der time_t an sich, sondern die Methode mktime().

    MFK schrieb:

    Übrigens: Was sind "Datis"?

    Datumse = Plural Datum 🙂



  • Balrog schrieb:

    Datumse = Plural Datum 🙂

    Daten ist der Plural von Datum. 😉



  • PuppetMaster2k schrieb:

    Balrog schrieb:

    Datumse = Plural Datum 🙂

    Daten ist der Plural von Datum. 😉

    Und ich dachte hier im Forum ginge es um C++ und nicht um Deutsch... 🤡

    Wie schon angemerkt, eigentlich bin ich auf der Suche nach dem verschollenen Datum. Oder meinetwegen auch: nach den verschollenen Daten.


Anmelden zum Antworten