C# Kalendar
Hi leute ich muss ein kleines programm für die schule schreiben und würde gerne ein paar infos erfahren habe gegoogled aber ständig kamen irgendwelche ms excel lösungen. also ich muss ein kalendar in c#(konsolen ebene) erstellen. der benutzer soll ein monat(zb 3) und ein jahr (zb 1983) eingeben und dann soll der märz 83 mit wochentagen ausgegeben werden etwa so:
MO | Di | Mi | Do | Fr | Sa | So
1 | 2 | 3... uw.
nun wollte ich fragen ob eventuell einer von euch weis wie ich den ersten wochentag eines monats ermittle und wie ich schaltjahre ermitteln kann das was ich bis jetzt heraufand war
jahr mod 4 dann mod 100 dann mod 400 und wenn ganzzahliges ergebnis rauskommt dann schaltjahr(vllt habe ich es auch falsch verstanden) also könnte mir mal da einer helfen und mir sagen wie ich
a: ersten wochentag im monat ermittle
b: anzahl der tag im monat
c: schaltjahre
d: eventuell kalendar woche
ich möchte keine quellcodes sehen sondern nur denkanstöße und ich darf nicht von .net intergrierte funktionen verwenden
MFG
MO | Di | Mi | Do | Fr | Sa | So
1 | 2 | 3... uw.
nun wollte ich fragen ob eventuell einer von euch weis wie ich den ersten wochentag eines monats ermittle und wie ich schaltjahre ermitteln kann das was ich bis jetzt heraufand war
jahr mod 4 dann mod 100 dann mod 400 und wenn ganzzahliges ergebnis rauskommt dann schaltjahr(vllt habe ich es auch falsch verstanden) also könnte mir mal da einer helfen und mir sagen wie ich
a: ersten wochentag im monat ermittle
b: anzahl der tag im monat
c: schaltjahre
d: eventuell kalendar woche
ich möchte keine quellcodes sehen sondern nur denkanstöße und ich darf nicht von .net intergrierte funktionen verwenden
MFG
Mein kleines Projekt
-Cruel Online-
-Cruel Online-
okki
unregistriert
du bist schon auf dem richtigen weg. als erstes bestimmten, ob das jahr ein schaltjahr ist.
jedes vierte jahr ist ein schaltjahr, dh. wenn eine beliebiges jahr durch vier teilbar ist, dann ist dieses jahr ein schaltjahr.
aber jedes 100. jahr ist kein schaltjahr.
aber jedes vierhunderste jahr wiederum doch. einfach weiterdenken und die formel noch vervollständigen :-)
diese berechnung kannst du in eine funktion bringen, zb istSchaltjahr(jahr).
daraus kannst du zwei funktion tageImJahr(jahr) und tageImMonat(jahr, monat) erstellen, die die anzahl der tage eines jahres/eines monats zurückgibt (abhängig von istSchaltjahr)
dann legst du du ein wochentag als ausgangsdatum fest, am besten irgendein neujahr (1.1.), von dem du den wochentag kennst. (unterschieldichen kalender (gregorianischer / julianischer) berücksichtigen). und jetzt nurnoch addieren: alle jahre die zwischen deinem eingegeben jahr und dem ausgangsdatum liegen, dazu noch die tageImMonat und den aktuellen tag addiert und fast fertig.
so ungefähr könnte ein (nicht gerade effizienter, aber leicht verständlicher) algorithmus aussehen.
jedes vierte jahr ist ein schaltjahr, dh. wenn eine beliebiges jahr durch vier teilbar ist, dann ist dieses jahr ein schaltjahr.
|
|
Quellcode |
1 |
schaltjahr = (jahr mod 4); |
aber jedes 100. jahr ist kein schaltjahr.
|
|
Quellcode |
1 |
schaltjahr = (jahr mod 4 AND NOT(jahr mod 100)) |
aber jedes vierhunderste jahr wiederum doch. einfach weiterdenken und die formel noch vervollständigen :-)
diese berechnung kannst du in eine funktion bringen, zb istSchaltjahr(jahr).
daraus kannst du zwei funktion tageImJahr(jahr) und tageImMonat(jahr, monat) erstellen, die die anzahl der tage eines jahres/eines monats zurückgibt (abhängig von istSchaltjahr)
dann legst du du ein wochentag als ausgangsdatum fest, am besten irgendein neujahr (1.1.), von dem du den wochentag kennst. (unterschieldichen kalender (gregorianischer / julianischer) berücksichtigen). und jetzt nurnoch addieren: alle jahre die zwischen deinem eingegeben jahr und dem ausgangsdatum liegen, dazu noch die tageImMonat und den aktuellen tag addiert und fast fertig.
so ungefähr könnte ein (nicht gerade effizienter, aber leicht verständlicher) algorithmus aussehen.
Dieser Beitrag wurde bereits 1 mal editiert, zuletzt von »okki« (7. April 2009, 08:53)
ehm ich habe so den windows kalendar angeschaut und mir ist aufgefallen dass jeder monat die selbe anzahl der tag hat bis auf den februar der hat entweder 28 oder 29 je nach schaltjahr. habe ich mich verguckt oder stimmt das wirklich dass alle monate selbe anzahl an tagen haben
Mein kleines Projekt
-Cruel Online-
-Cruel Online-
so ich habe mal im internet eine mathematische formel herausgeunden wie ich den ersten wochentag im monat errechne es funktioniert auch wunderbar nur mein problem ist wieso funktioniert es?? ich addiere da komische zahlen und weis net wofür die sind hier mal der ausschnitt:
egal welches jahr ich eingebe, es kommt immer das richtige raus aber was haben die zahlen wie 2299160 usw zu bedeuten??
MFG
Spoiler
![]()
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 30int iLastMonth; int iLastYear; int iResult; int iFirstDay = 1; if (this.iMonth < 3) { iLastMonth = this.iMonth + 12; iLastYear = this.iYear - 1; } else { iLastMonth = this.iMonth; iLastYear = this.iYear; } iLastMonth++; iResult = iLastYear * 365 + (int)Math.Floor((double)iLastYear / 4) + (int)Math.Floor(((double)iLastMonth * 306) / 10) + iFirstDay + 1720995; if (iResult > 2299170) { iResult = iResult - (int)Math.Floor((double)iLastYear / 100) + (int)Math.Floor((double)iLastYear / 400) + 2; } else { if(iResult > 2299160) { iResult = iResult - (int)Math.Floor((double)iLastYear / 100) + (int)Math.Floor((double)iLastYear / 400) + 2 + 10; } } iResult = iResult % 7; return iResult+1;
egal welches jahr ich eingebe, es kommt immer das richtige raus aber was haben die zahlen wie 2299160 usw zu bedeuten??
MFG
Mein kleines Projekt
-Cruel Online-
-Cruel Online-
okki
unregistriert
das ist die datumsgrenze, an der vom julianischen (2299160 Tage ab 1.1.0, irgendwann im 18. jahrhundert) auf gregorianischen kalender umgestellt wurde. der gregorianische kalender geht wiederum 10 tage vorraus, deshalb sind zwei if-schliefen mit verschiedenen bedingungen zu sehen.
ich denk du wolltest keinen code sehen!? wenn du eleganter programmieren willst, dann kannst du auch nach der gaußschen wochentagsberechnung googlen oder bei wiki nachschlagen, da steht schon ne menge drin.
grüße okki
ich denk du wolltest keinen code sehen!? wenn du eleganter programmieren willst, dann kannst du auch nach der gaußschen wochentagsberechnung googlen oder bei wiki nachschlagen, da steht schon ne menge drin.
grüße okki
Ähnliche Themen
-
Allgemeines Forum »-
Welche Features haltet Ihr für eine Website sinnvoll ?
(30. Juni 2005, 14:02)
-
PHP »-
wbb kalender ohne wbb? *g*
(23. Januar 2004, 20:28)
-
Feedback-Forum »-
Einmal bewerten, bitte!
(27. Dezember 2002, 11:38)


