PDA

Archiv verlassen und diese Seite im Standarddesign anzeigen : [C++] was alla Date()



Giuly
12-08-2003, 22:00
hi,
in Java gibt es ja Date(), was ein Datum alla "Tue Aug 12 23:00:04 CEST 2003" ausgibt.
wie gebe genau dieses in C++ wieder?

Berufspenner
12-08-2003, 22:13
Hi

Guck dir mal time.h an:
http://www.cplusplus.com/ref/ctime/

Cu
André

Giuly
12-08-2003, 22:50
ctime () gibts so aus: Tue Aug 12 23:50:11 2003
wie mach ich von 2003 noch ein CEST?

Giuly
13-08-2003, 11:30
ich habs so gelöst:



char time_string[300], tag[3], monat[3];
int tag_n, monat_n;
time_t rawtime;
tm * ptm;

time( &rawtime );
ptm = gmtime( &rawtime );
tag_n = ptm->tm_wday;
monat_n = ptm->tm_mon;
switch(tag_n)
{
case 0: strcpy(tag, "Sun"); break;
case 1: strcpy(tag, "Mon"); break;
case 2: strcpy(tag, "Tue"); break;
case 3: strcpy(tag, "Wed"); break;
case 4: strcpy(tag, "Thu"); break;
case 5: strcpy(tag, "Fri"); break;
case 6: strcpy(tag, "Sat"); break;
}
switch(monat_n)
{
case 0: strcpy(monat, "Jan"); break;
case 1: strcpy(monat, "Feb"); break;
case 2: strcpy(monat, "Mar"); break;
case 3: strcpy(monat, "Apr"); break;
case 4: strcpy(monat, "May"); break;
case 5: strcpy(monat, "Jun"); break;
case 6: strcpy(monat, "Jul"); break;
case 7: strcpy(monat, "Aug"); break;
case 8: strcpy(monat, "Sep"); break;
case 9: strcpy(monat, "Oct"); break;
case 10: strcpy(monat, "Nov"); break;
case 11: strcpy(monat, "Dec"); break;
}

sprintf(time_string, "%s %s %2d %2d:%2d:%2d CEST %2d", tag, monat, ptm->tm_mday,ptm->tm_hour+2, ptm->tm_min, ptm->tm_sec, ptm->tm_year+1900);

wraith
13-08-2003, 11:59
tag und monat müßen Platz für mind. 4 Zeichen haben,nicht nur 3.

Giuly
13-08-2003, 14:02
0 1 2 3 = 4 Zeichen

Berufspenner
13-08-2003, 14:04
Original geschrieben von Giuly
0 1 2 3 = 4 Zeichen Eben nicht. Tag[3] ist 0 1 \0.

Cu
André

Giuly
13-08-2003, 14:15
case 3: strcpy(tag, "Wed"); break;

tag[0] = "W";
tag[1] = "e";
tag[2] = "d";
tag[3] = "\0";

Berufspenner
13-08-2003, 14:18
Original geschrieben von Giuly


case 3: strcpy(tag, "Wed"); break;

tag[0] = "W";
tag[1] = "e";
tag[2] = "d";
tag[3] = "\0"; Hä? Was willst du damit jetzt sagen?

Cu
André

wraith
13-08-2003, 14:18
Ich finde sowas ja immer wieder erfrischend,gerade bei einem solchen Wetter :).

int tag[3];
Damit ist ein Array mit 3 Einträgen,das bedeutet die 3,und nicht das 3 der maximale Index ist.
Und da wir in C bei 0 anfangen zu zählen,sind gültige Indices 0,1,2.

Giuly
13-08-2003, 14:21
ich verstehe dich nicht, aber wnn ich string_time ausgebe kommt da
Wed Aug 13 15:20:45 CEST 2003
raus. mehr wollte ich nicht.

Giuly
13-08-2003, 14:23
ich verstehe dich zwar nicht, aber es geht trotzdem :rolleyes:. Wenn ich string_time ausgebe kommt da
Wed Aug 13 15:20:45 CEST 2003
raus. mehr wollte ich nicht.

wraith
13-08-2003, 14:25
Original geschrieben von Giuly
ich verstehe dich nicht, aber wnn ich string_time ausgebe kommt da
Wed Aug 13 15:20:45 CEST 2003
raus. mehr wollte ich nicht.
Die '\0' wird in Speicher reingeschrieben,der dir entweder nicht gehört (undefined behavior),oder in Speicher geschrieben,der dir gehört,aber von einer anderen Variablen besetzt ist (auch nicht viel besser).

Mach einfach


char tag[4];
char monat[4];

mehr wollte ich nicht sagen :).

Giuly
13-08-2003, 14:31
ok, hab ich. Wenn jetzt ruhe ist... :o
nochmal was anderes:
Wie kann ich auf den ersten Buchstaben von ptm->tm_sec zugreifen? Bei Sekunden < 10 ist das erste Zeichen ein Leerzeichen, was ich gegen eine Null tauschen will.

anda_skoa
13-08-2003, 16:35
%02d als Formatstring benutzen.

Ciao,
_