Quoted
Schreiben Sie ein Programm, welches die aktuelle Zeit, gegeben in Sekunden, in folgendes Format
konvertiert:
Tag.Monat.Jahr Stunden:Minutenekunden
Das Programm soll dazu einen long-Wert ¨uber die Konsole einlesen. Unsere Zeitrechnung startet
am 1.1.1970 0:00:00 Uhr. Die aktuelle Zeit wird durch den long-Werte, der die Anzahl der
Sekunden nach dem 1.1.1970 0:00:00 Uhr angibt, beschrieben. Abweichungen durch Zeitzonen
sind zu ignorieren.
Hinweis: Beachten Sie die Schaltjahre nach dem gregorianischen Kalender.
|
|
C Quellcode |
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 61 62 63 64 65 66 67 68 69 70 71 72 73 74 75 76 77 78 79 80 81 82 83 84 85 86 87 88 89 90 91 92 |
#include <iostream> using namespace std; int main () { long wert; long tag=0,monat=0,jahr=0,stunde=0,minute=0,sek=0,schaltjahr=0; // Schaltjahre = alle 4 Jahre, außer Jahr 100, dafür ist Jahr 400 ein Schaltjahr. // Da 100 Jahre einen zu großen (Sekunden)-Wert für den Datentyp long erzeugen, // wird die 100 und 400 Jahre-Regel nicht berücksichtigt. cout << endl; cout << "Dieses Programm errechnet aus ihren Angaben das aktuelle Datum inklusive Uhrzeit" << endl; cout << "Startzeitpunkt ist der 1.1.1970 0:00:00 Uhr" << endl; cout << endl; cout << "Geben Sie einen Wert ein (in Sekunden): "; cin >> wert; while ((wert/31536000)>=1) // solange wert groesser-gleich 1 Jahr... { wert=wert-31536000; jahr++; if (((jahr+1)%4)==0) { schaltjahr++; } } while ((wert/2628000)>=1) // solange wert groesser-gleich 1 Monat... { wert=wert-2628000; monat++; } while ((wert/86400)>=1) // solange wert groesser-gleich 1 Tag... { wert=wert-86400; tag++; if ((schaltjahr>=1)&&(monat>=2)&&(tag>=28)) { tag++; } } while ((wert/3600)>=1) // solange wert groesser-gleich 1h... { wert=wert-3600; stunde++; } while ((wert/60)>=1) // solange wert groesser-gleich 1 Minute... { wert=wert-60; minute++; } while (wert>0) { wert=wert-1; sek++; } jahr=1970+jahr; monat=1+monat; tag=1+tag; stunde=0+stunde; minute=0+minute; sek=0+sek; if (stunde>12) { stunde=stunde-12; } cout << endl; if ((minute<10)&&(sek>=10)) { cout << tag<<"."<<monat<<"."<<jahr<<" "<<stunde<<":0"<<minute<<":"<<sek<<" Uhr" << endl; } if ((sek<10)&&(minute>=10)) { cout << tag<<"."<<monat<<"."<<jahr<<" "<<stunde<<":"<<minute<<":0"<<sek<<" Uhr" << endl; } if ((sek>=10)&&(minute>=10)) { cout << tag<<"."<<monat<<"."<<jahr<<" "<<stunde<<":"<<minute<<":"<<sek<<" Uhr" << endl; } if ((sek<10)&&(minute<10)) { cout << tag<<"."<<monat<<"."<<jahr<<" "<<stunde<<":0"<<minute<<":0"<<sek<<" Uhr" << endl; } cout << endl; system("pause"); return 0; |
Quoted from ""bcc-fan""
Theoretisch brauchst du es schon beim Jahr 2000, aber praktisch kommst du,
weil 400 Jahrfaktor, zum gleichen Ergebnis.
Aber warum steht in der Aufgabe Gregorianischer Kalender?
MfG Bcc-fan
Quoted from ""phax""
Mit der Funktion
![]()
C Quellcode
1 struct tm * localtime ( const time_t * timer );
kannst du aus der Anzahl Sekunden seit 1970 eine Struktur machen und diese dann auslesen.
Beispiel:
![]()
C Quellcode
1 2 time_t l = 1234567; struct tm* pTime = localtime (&l);
hth
Quoted from ""phax""
Aber das ist doch genau das was localtime macht.
Oder hab ich da einen groben Denkfehler drin?
|
|
C Quellcode |
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 |
#include <iostream> #include <ctime> #include <cstdio> using namespace std; int main () { time_t wert; // Schaltjahre = alle 4 Jahre, auáer Jahr 100, dafr ist Jahr 400 ein Schaltjahr. // Da 100 Jahre einen zu groáen (Sekunden)-Wert fr den Datentyp long erzeugen, // wird die 100 und 400 Jahre-Regel nicht bercksichtigt. cout << endl; cout << "Dieses Programm errechnet aus ihren Angaben das aktuelle Datum inklusive Uhrzeit" << endl; cout << "Startzeitpunkt ist der 1.1.1970 0:00:00 Uhr" << endl; cout << endl; cout << "Geben Sie einen Wert ein (in Sekunden): "; cin >> wert; struct tm* ptm = localtime (&wert); printf ("%02d.%02d.%04d %02d:%02d:%02d\n", ptm->tm_mday, ptm->tm_mon + 1, ptm->tm_year + 1900, ptm->tm_hour, ptm->tm_min, ptm->tm_sec); system("pause"); return 0; } |