Seite 1 von 2
UnixTime berechnungen Qtime / Monat / Tag / Jahr
Verfasst: 21. April 2006 23:25
von patrik08
das Datum Qtime bringt mich in den keller ...
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?
Verfasst: 22. April 2006 00:58
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
Verfasst: 22. April 2006 11:07
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
Verfasst: 22. April 2006 11:50
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...
Verfasst: 22. April 2006 12:17
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!
Verfasst: 22. April 2006 12:26
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...
Verfasst: 22. April 2006 13:03
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);
Verfasst: 22. April 2006 13:49
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...
Und QDate gibt Dir noch wesentlich mehr Informationen.
Aber im Grunde hat es keinen Sinn mit dir zu diskutieren - Du hast eh immer Recht

Verfasst: 22. April 2006 15:26
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 ...
Verfasst: 22. April 2006 16:11
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
Verfasst: 22. April 2006 16:46
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.
Verfasst: 22. April 2006 17:21
von Christian81
Verfasst: 22. April 2006 20:54
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...
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;
}
Verfasst: 22. April 2006 22:19
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.
Verfasst: 22. April 2006 22:48
von [ToTTo]
Wo Christian Recht hat, hat er Recht.
Ersteinmal RTFM und zum Zweiten der Code ist mal ne Schau.
PS @ Christian: Ich glaube wird sind beide gleich freundlich wenn jemand Mist schreibt.
Gruß
ToTTo