UnixTime berechnungen Qtime / Monat / Tag / Jahr

Alles rund um die Programmierung mit Qt
patrik08
Beiträge: 746
Registriert: 27. Februar 2006 10:48
Wohnort: DE Freiburg

UnixTime berechnungen Qtime / Monat / Tag / Jahr

Beitrag von patrik08 »

das Datum Qtime bringt mich in den keller ... :oops:

Code: Alles auswählen

/* im php mache ich */
monat = date("m",unixtimenummer);
/* und bekomme eine monatzahl */
/* oder */
date ("U", mktime (0,0,0,12,32,2000));
/* und habe die unixtime von ersten 2001*/
Mit Qtime kann man es drehen wie man will er geht nicht in die vergagehnheit ... die doc spricht nur in gegenwart! so wie dieses forum..suche.

wenn ich alle db eintrage sehr genau ablege mit unixtime..
kann ich abrufen umsatz-zahlen august gebe meine ...
zahl mktime ein von 1.8.00 und die mktime von 1.9.00.00 und alle eintrage zwischen diese zahlen ist der august... order by utime... und die db ist richtig....

doch wie bringe ich qtime ins datum retour?. hat qt eine vergagehnheit?
Nassian
Beiträge: 126
Registriert: 20. Juni 2005 21:14

Beitrag von Nassian »

Code: Alles auswählen

uint uiTimestamp = QDateTime::fromString( "1.1.2000", "d.M.yyyy" ).toTime_t();

QDateTime datetime;
datetime.setTime_t( uiTimestamp );
QString strTimestamp = datetime.toString( "d.M.yyyy" );
Nachzulesen im Assistant oder der online Doku :)

Was du mit 'Vergangenheit' meinst versteh ich ehrlichgesagt nicht, is doch vollkommen egal welcher Tag/welche Uhrzeit gerade ist.


SG Alexander
patrik08
Beiträge: 746
Registriert: 27. Februar 2006 10:48
Wohnort: DE Freiburg

Beitrag von patrik08 »

Das stimmt noch.....

Code: Alles auswählen

    int now = time( NULL );
    int onhour = 60 * 60;  /* eine stunde */
    int oneday = onhour * 24;     /* ein tag */
    int onemounth = oneday * 30;   /* ein mon. */
    int fourdayago = now - (oneday * 4);

    QDateTime datetime;
    datetime.setTime_t( fourdayago );
    QString strTimestamp = datetime.toString( "d.M.yyyy" ); 
    msgb->information( this , "Unix time vor 4 tagen",QString( "Human time => %1 Unixtime %2" ).arg( strTimestamp , int2char(fourdayago) ) ); 
    

Jedoch zukunf..... ein tag nach silvester sollte 1.1.2007 kommen aber es kommt 2106 .....

Code: Alles auswählen


    int utimer = QDateTime::fromString( "32.12.2006", "d.M.yyyy" ).toTime_t(); 
    
    /* 2106 !!! */
    
    QDateTime datetime;
    datetime.setTime_t( utimer );
    QString strTimestamp = datetime.toString( "d.M.yyyy" ); 
    msgb->information( this , "erster tag im neuen jahr..",QString( "Human time => %1 Unixtime %2" ).arg( strTimestamp , int2char(utimer) ) ); 
    

gibt es bereist qt4 projekten die ein kalender haben wie dieses qt3 beispiel?

http://www.qtforum.de/forum/viewtopic.p ... t=kalender
Christian81
Beiträge: 7319
Registriert: 26. August 2004 14:11
Wohnort: Bremen
Kontaktdaten:

Beitrag von Christian81 »

patrik08 hat geschrieben: int utimer = QDateTime::fromString( "32.12.2006", "d.M.yyyy" ).toTime_t();
Schonmal in die Doku geschaut? Du lässt Dir alles vorkauen ohne selbst mal nachzudenken...
"Returns the QDateTime represented by the string, using the format given, or an invalid datetime if this is not possible."
32.12.2006 ist ein ungültiges Datum...
MfG Christian

'Funktioniert nicht' ist keine Fehlerbeschreibung
patrik08
Beiträge: 746
Registriert: 27. Februar 2006 10:48
Wohnort: DE Freiburg

Beitrag von patrik08 »

ich bekomme lust den ganze php source code in einen ordner zu schmeissen mit qmake -project daruber zu fahren "TEMPLATE = lib" setzten .... und hoffen das eine lib rauskommt...

die Datum im qt .... das ist ja Steinzeit!
Christian81
Beiträge: 7319
Registriert: 26. August 2004 14:11
Wohnort: Bremen
Kontaktdaten:

Beitrag von Christian81 »

patrik08 hat geschrieben:die Datum im qt .... das ist ja Steinzeit!
Nur weil, wenn du ein ungültiges Datum angibst, was ungültiges rauskommt? Echt intelligent...
MfG Christian

'Funktioniert nicht' ist keine Fehlerbeschreibung
patrik08
Beiträge: 746
Registriert: 27. Februar 2006 10:48
Wohnort: DE Freiburg

Beitrag von patrik08 »

zeit berechnungen mit php ist ja super luxus dagegen:

Hingegen Qcalendar must man ... selber schreiben..

http://php.net/mktime/ http://php.net/date/

$lastday = mktime (0,0,0,3,0,2000);
echo strftime ("Der letzte tag vom februar 2000 ist: %d", $lastday);
Christian81
Beiträge: 7319
Registriert: 26. August 2004 14:11
Wohnort: Bremen
Kontaktdaten:

Beitrag von Christian81 »

patrik08 hat geschrieben:zeit berechnungen mit php ist ja super luxus dagegen:

Hingegen Qcalendar must man ... selber schreiben..

http://php.net/mktime/ http://php.net/date/

$lastday = mktime (0,0,0,3,0,2000);
echo strftime ("Der letzte tag vom februar 2000 ist: %d", $lastday);
Und was will ich mit einem int - der sagt mir überhaupt nichts... Abgesehen davon dass ich es mit Qt genaus kann...

Code: Alles auswählen

QDate d = QDate('2000','3','1').addDays(-1);
Und QDate gibt Dir noch wesentlich mehr Informationen.

Aber im Grunde hat es keinen Sinn mit dir zu diskutieren - Du hast eh immer Recht :roll:
MfG Christian

'Funktioniert nicht' ist keine Fehlerbeschreibung
patrik08
Beiträge: 746
Registriert: 27. Februar 2006 10:48
Wohnort: DE Freiburg

Beitrag von patrik08 »

der erster januar 1970 ist unixtime = 0 (zero) da bin ich mir ganz sicher..

vor dieses datum muss ich ganz sicher nicht rechnen...
aber die db MYSQL buch-haltung ist jeder eintrag in unixtime...
um zu sortieren monaten suchen ecc...

Code: Alles auswählen

uint  getUnixTime(int d , int m , int j)
{
    /* return 00.00 unixtime from this day */
    /* d = the day as number without a leading zero (1 to 31) */
    /* M = the month as number without a leading zero (1-12) */
    /* yyyy = the year as four digit number (1752-8000) */
    
    if (!d > 0 and !d < 32) {
     d =1;
    }
    if (!m > 0 and !m < 13) {
     m =1;
    }  
     if (!j > 1969 and !j < 2016) {  /* grep UPDATE_APPS */
     j =1970;
    }    
    QString  CheckFinal = QString( "%1.%2.%3" ).arg( int2char(d) , int2char(m)  , int2char(m) );
    uint unixtime = QDateTime::fromString( CheckFinal, "d.M.yyyy" ).toTime_t(); 
    return unixtime;
}

msgb->information( this , "Zeit result....Unix time am tag 00.00........",QString( "2,1,1970 => %1 heute 22,4,2006 = %2 " ).arg( getUnixTime(2,1,1970) , getUnixTime(22,4,2006) ) );

2,1,1970 sollte nicht mehr als 86400 sein doch die zahl ist sehr viel mehr.... da qdate zwischen 1752 und 8000 rechnet ...
Christian81
Beiträge: 7319
Registriert: 26. August 2004 14:11
Wohnort: Bremen
Kontaktdaten:

Beitrag von Christian81 »

Ich glaube dieser Code sollte in die Rubrik 'und so bitte nicht machen' *lool*
Erst mühsam das Datum in einen String wandeln nur damit man QDate::fromString() verwenden kann... und dann noch int2char(). Ich hau mich weg...
Und immer noch kein Grund warum man mit time_t rechnen muss... tztz
MfG Christian

'Funktioniert nicht' ist keine Fehlerbeschreibung
patrik08
Beiträge: 746
Registriert: 27. Februar 2006 10:48
Wohnort: DE Freiburg

Beitrag von patrik08 »

Christian81 hat geschrieben: Und immer noch kein Grund warum man mit time_t rechnen muss... tztz
ich habe geschrieben = ( aber die db MYSQL buch-haltung ist jeder eintrag in unixtime.)

die query ist in etwa so ....

select euro(summ) from kassa where epoche > 1120555925 and epoche < 1120551925 order by epoche


wen der user den ganze august will vom 2005 muss ich doch auf die datum zahl UNIXTIME erst kommen also von stunde null 1.8.2005 bis stunde null vom 1.9.2005 .... und einen unixtime bekommt man nur mit
toTime_t() oder von time(null) sekunden substraieren... was kalender ungenau ist ...

da qt nur d / m / J hat und kein U

setTime_t bekommt ... Convenience typedef for unsigned int.
Christian81
Beiträge: 7319
Registriert: 26. August 2004 14:11
Wohnort: Bremen
Kontaktdaten:

Beitrag von Christian81 »

MfG Christian

'Funktioniert nicht' ist keine Fehlerbeschreibung
patrik08
Beiträge: 746
Registriert: 27. Februar 2006 10:48
Wohnort: DE Freiburg

Beitrag von patrik08 »

qdate kann nur d / m / J das ist eine tatsache... eine richtige unixnummer bekomt man nicht ... nur tage monate und jahr...

so habe ich noch etwas rosa farbe in meinen text editor... :D
von setlocale strftime localtime und nicht immer alles schwarz vo mit Q anfangt.. und

und nun muss ich nur noch retour von tag monat jahr...
und ist in der time_t definition ...

Code: Alles auswählen


 #include <clocale>
#include <ctime>
#include <iostream>

const char*  UnixTime2UserTime(int utimenr)
{
         time_t t;
         QString locale_user = QLocale::system().name();
         setlocale( LC_TIME, qtchars(locale_user) );  /* compiler locale */
         size_t const buffer_size = 1024;
         char buffer[ buffer_size ];
         char const* format = "%A %d %B %Y %H:%M";
         if (utimenr > 0) {
           time_t t = utimenr;  
         } else {
           time_t t = time( 0 );  
         }
         strftime( buffer, buffer_size,
                 format, localtime( &t ) );
         return buffer;
}

Christian81
Beiträge: 7319
Registriert: 26. August 2004 14:11
Wohnort: Bremen
Kontaktdaten:

Beitrag von Christian81 »

patrik08 hat geschrieben:qdate kann nur d / m / J das ist eine tatsache... eine richtige unixnummer bekomt man nicht ... nur tage monate und jahr...
Ist schon blöd wenn man zu doof zum lesen ist.

Code: Alles auswählen

QDateTime dt;
dt.setTime_t ( seconds_since_1970 );
QDate d = dt.date();

und umgekehrt:

QDateTime dt;
QDate date(y,m,d );
dt.setDate(date);
seconds_since_1970 = dt.toTime_t ();
Und btw: Viel Spass mit deiner Funktion - wenn Du jemals einen korrekten String zurückbekommst gebe ich Dir einen aus.
MfG Christian

'Funktioniert nicht' ist keine Fehlerbeschreibung
[ToTTo]
Beiträge: 41
Registriert: 2. November 2005 19:00

Beitrag von [ToTTo] »

Wo Christian Recht hat, hat er Recht.
Ersteinmal RTFM und zum Zweiten der Code ist mal ne Schau. :lol:

PS @ Christian: Ich glaube wird sind beide gleich freundlich wenn jemand Mist schreibt.
:D

Gruß

ToTTo
Antworten