Jahr und Datum berechnen

Diese Seite verwendet Cookies. Durch die Nutzung unserer Seite erklären Sie sich damit einverstanden, dass wir Cookies setzen. Weitere Informationen

  • Jahr und Datum berechnen

    folgender Auftrag:

    Schreiben Sie ein Programm, welches die aktuelle Zeit, gegeben in Sekunden, in folgendes Format
    konvertiert:
    Tag.Monat.Jahr Stunden:Minuten:Sekunden
    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.


    mein Quelltext:

    Quellcode

    1. #include <iostream>
    2. using namespace std;
    3. int main ()
    4. {
    5. long wert;
    6. long tag=0,monat=0,jahr=0,stunde=0,minute=0,sek=0,schaltjahr=0;
    7. // Schaltjahre = alle 4 Jahre, außer Jahr 100, dafür ist Jahr 400 ein Schaltjahr.
    8. // Da 100 Jahre einen zu großen (Sekunden)-Wert für den Datentyp long erzeugen,
    9. // wird die 100 und 400 Jahre-Regel nicht berücksichtigt.
    10. cout << endl;
    11. cout << "Dieses Programm errechnet aus ihren Angaben das aktuelle Datum inklusive Uhrzeit" << endl;
    12. cout << "Startzeitpunkt ist der 1.1.1970 0:00:00 Uhr" << endl;
    13. cout << endl;
    14. cout << "Geben Sie einen Wert ein (in Sekunden): ";
    15. cin >> wert;
    16. while ((wert/31536000)>=1) // solange wert groesser-gleich 1 Jahr...
    17. {
    18. wert=wert-31536000;
    19. jahr++;
    20. if (((jahr+1)%4)==0)
    21. {
    22. schaltjahr++;
    23. }
    24. }
    25. while ((wert/2628000)>=1) // solange wert groesser-gleich 1 Monat...
    26. {
    27. wert=wert-2628000;
    28. monat++;
    29. }
    30. while ((wert/86400)>=1) // solange wert groesser-gleich 1 Tag...
    31. {
    32. wert=wert-86400;
    33. tag++;
    34. if ((schaltjahr>=1)&&(monat>=2)&&(tag>=28))
    35. {
    36. tag++;
    37. }
    38. }
    39. while ((wert/3600)>=1) // solange wert groesser-gleich 1h...
    40. {
    41. wert=wert-3600;
    42. stunde++;
    43. }
    44. while ((wert/60)>=1) // solange wert groesser-gleich 1 Minute...
    45. {
    46. wert=wert-60;
    47. minute++;
    48. }
    49. while (wert>0)
    50. {
    51. wert=wert-1;
    52. sek++;
    53. }
    54. jahr=1970+jahr;
    55. monat=1+monat;
    56. tag=1+tag;
    57. stunde=0+stunde;
    58. minute=0+minute;
    59. sek=0+sek;
    60. if (stunde>12)
    61. { stunde=stunde-12; }
    62. cout << endl;
    63. if ((minute<10)&&(sek>=10))
    64. {
    65. cout << tag<<"."<<monat<<"."<<jahr<<" "<<stunde<<":0"<<minute<<":"<<sek<<" Uhr" << endl;
    66. }
    67. if ((sek<10)&&(minute>=10))
    68. {
    69. cout << tag<<"."<<monat<<"."<<jahr<<" "<<stunde<<":"<<minute<<":0"<<sek<<" Uhr" << endl;
    70. }
    71. if ((sek>=10)&&(minute>=10))
    72. {
    73. cout << tag<<"."<<monat<<"."<<jahr<<" "<<stunde<<":"<<minute<<":"<<sek<<" Uhr" << endl;
    74. }
    75. if ((sek<10)&&(minute<10))
    76. {
    77. cout << tag<<"."<<monat<<"."<<jahr<<" "<<stunde<<":0"<<minute<<":0"<<sek<<" Uhr" << endl;
    78. }
    79. cout << endl;
    80. system("pause");
    81. return 0;
    Alles anzeigen



    Das Problem: Das Programm rechnet eben mit 1Jahr/12=Tage pro Monat. Und das ist ja nicht richtig, da die Monate ja unterschiedlich viele Tage haben...
  • "bcc-fan" schrieb:

    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


    stimmt beim Jahr 2000 brauch ich es. Da steht gregorianischer Kalender, damit wir alle 4 Jahre einen Tag mehr rechnen und die Aufgabe anspruchsvoller wird
  • "phax" schrieb:

    Mit der Funktion

    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:

    Quellcode

    1. time_t l = 1234567;
    2. struct tm* pTime = localtime (&l);


    hth


    ja das weiß ich auch, aber ich soll ja aus Sekunden das Datum berechnen, nicht umgekehrt
  • "phax" schrieb:

    Aber das ist doch genau das was localtime macht.
    Oder hab ich da einen groben Denkfehler drin?


    localtime berechnet aus den vergangenen Sekunden seit 1970 das aktuelle Datum+Uhrzeit. Ich möchte aber das der Nutzer einen Sekundenwert eingibt, ich verstehe nicht wie man das mit localtome umsetzen soll? Habs eh schon abgegeben, wäre trotzdem interessant
  • Quellcode

    1. #include <iostream>
    2. #include <ctime>
    3. #include <cstdio>
    4. using namespace std;
    5. int main ()
    6. {
    7. time_t wert;
    8. // Schaltjahre = alle 4 Jahre, auáer Jahr 100, dafr ist Jahr 400 ein Schaltjahr.
    9. // Da 100 Jahre einen zu groáen (Sekunden)-Wert fr den Datentyp long erzeugen,
    10. // wird die 100 und 400 Jahre-Regel nicht bercksichtigt.
    11. cout << endl;
    12. cout << "Dieses Programm errechnet aus ihren Angaben das aktuelle Datum inklusive Uhrzeit" << endl;
    13. cout << "Startzeitpunkt ist der 1.1.1970 0:00:00 Uhr" << endl;
    14. cout << endl;
    15. cout << "Geben Sie einen Wert ein (in Sekunden): ";
    16. cin >> wert;
    17. struct tm* ptm = localtime (&wert);
    18. printf ("%02d.%02d.%04d %02d:%02d:%02d\n",
    19. ptm->tm_mday,
    20. ptm->tm_mon + 1,
    21. ptm->tm_year + 1900,
    22. ptm->tm_hour,
    23. ptm->tm_min,
    24. ptm->tm_sec);
    25. system("pause");
    26. return 0;
    27. }
    Alles anzeigen