BallerNacken
Ensign
- Registriert
- März 2008
- Beiträge
- 227
Nabend Leute,
ich habe mir mit Hilfe vieler Quellen ein kleines Programm geschrieben, welches den User fragt welches Jahr es ist, daraus errechnet ob es sich um ein Schaltjahr handelt oder nicht und dementsprechend aus dem DOY (weitere Userabfrage) das entsprechende Datum berechnet.
Das funktioniert soweit auch einwandfrei, mit einer kleinen Einschränkung. Für die Monate Januar und Februar funktioniert das nicht wirklich. Auch wenn es sich dabei nicht um ein Schaltjahr handelt.
Ein paar kleine Beispiele:
Eingabe User:
Ich komme dem Fehler leider nicht auf die schliche. Und bei dem ganzen Kram, den ich heute bezüglich der Zeitformate in c++ gelesen habe, bin ich auch ganz schön verwirrt.
Hier der Code:
Grüße,
BallerNacken
ich habe mir mit Hilfe vieler Quellen ein kleines Programm geschrieben, welches den User fragt welches Jahr es ist, daraus errechnet ob es sich um ein Schaltjahr handelt oder nicht und dementsprechend aus dem DOY (weitere Userabfrage) das entsprechende Datum berechnet.
Das funktioniert soweit auch einwandfrei, mit einer kleinen Einschränkung. Für die Monate Januar und Februar funktioniert das nicht wirklich. Auch wenn es sich dabei nicht um ein Schaltjahr handelt.
Ein paar kleine Beispiele:
Eingabe User:
Ausgabe:Jahr: 2015
DOY: 300
Eingabe User:2015 ist ein normales Jahr mit dem folgenden Datum: 27.10.2015
Ausgabe:Jahr: 2012
DOY: 300
Das wird beides richtig berechnet. Nehme ich die gleichen Jahre, aber den Tag 31, was für ein normales Jahr den 31.01.2015 bedeuten würde, erhalte ich den 03.02.2015. Bei einem Schaltjahr erhalte ich den 02.02.2015.2015 ist ein normales Jahr mit dem folgenden Datum: 26.10.2015
Ich komme dem Fehler leider nicht auf die schliche. Und bei dem ganzen Kram, den ich heute bezüglich der Zeitformate in c++ gelesen habe, bin ich auch ganz schön verwirrt.

Hier der Code:
Code:
#include <time.h>
#include <cstdio>
#include <iostream>
using namespace std;
//benutzen der Funktionen zum Ermitteln von Schaltjahren
bool leapYear(int);
int main(int argc, char *argv[])
{
tm t;
int daynum;
int year;
int leap;
//Userabfrage
cout << "Please enter the year: ";
cin >> year;
cout << "Please enter the DOY you want to convert into the date: ";
cin >> daynum;
leap = leapYear(year);
//Wenn es ein Schaltjahr ist, wird das Datum so berechnet
if (leap)
{
time_t now = time(NULL);
gmtime_r(&now, &t);
t.tm_sec = 0;
t.tm_min = 0;
t.tm_hour = 0;
t.tm_mday = 0;
t.tm_mon = 1;
time_t ref = mktime(&t);
time_t day = ref + (daynum -1) * 86400;
gmtime_r(&day, &t);
cout << year << " is a leap year, the date is: ";
std::printf("%02d/%02d/%04d\n", t.tm_mday, t.tm_mon, year);
}
else // Ist es kein Schaltjahr wird es so berechnet
{
time_t now = time(NULL);
gmtime_r(&now, &t);
t.tm_sec = 0;
t.tm_min = 0;
t.tm_hour = 0;
t.tm_mday = 1;
t.tm_mon = 1;
time_t ref = mktime(&t);
time_t day = ref + (daynum - 1) * 86400;
gmtime_r(&day, &t);
cout << year << " is a normal year, the date is: ";
std::printf("%02d/%02d/%04d\n", t.tm_mday, t.tm_mon, year);
}
return 0;
}
//Funktion zur Bestimmung eines Schaltjahres
bool leapYear(int year)
{
return (year % 400 == 0 || (year % 100 != 0 && year % 4 == 0));
}
Grüße,
BallerNacken
Zuletzt bearbeitet: