Länge der Wochen in einem Kalender abfragen.

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

  • Länge der Wochen in einem Kalender abfragen.

    Hi,

    zerbrech mir geraden den Kopf an einer scheinbar simplen Aufgabe: Für Kalender-Arithmetik die Länge der aktuellen Woche zu bestimmen.
    Man könnte mir auch helfen indem man bestätigt, dass alle Kalender dieser Welt Wochen mit 7 Tagen verwenden. :D

    Da ich mir da leider nicht sicher bin hab ich es erst so versucht.

    Quellcode

    1. NSRange daysRange = [userTimeZoneCalendar rangeOfUnit:NSCalendarUnitDay inUnit:NSCalendarUnitWeekOfMonth forDate:startOfWeekDate];
    2. NSInteger daysInWeek = daysRange.length;
    Kurz darauf aber gemerkt, dass das Blödsinn ist, da eine Woche auch nur teilweise in einem Monat liegen kann, wodurch dich auch weniger als 7 Tage zurück bekommen kann.
    NSCalendarUnitWeekOfMonth durch NSCalendarUnitWeekOfYear zu ersetzen hilft dann natürlich auch wenig, da in der ersten und letzten Woche des Jahres das Ergebnis wieder nicht stimmt.

    Wie kommt man da sonst ran?
  • NSWeekdayCalendarUnit
    Specifies the weekday unit.

    The corresponding value is an kCFCalendarUnitSecond. Equal to kCFCalendarUnitWeekday. The weekday units are the numbers 1 through N (where for the Gregorian calendar N=7 and 1 is Sunday).

    Available in iOS 2.0 and later.
    Deprecated in iOS 8.0.

    Mit diesem Wissen könntest Du den aktuellen Kalender einfach befragen:

    C-Quellcode

    1. NSRange weekdayRange = [[NSCalendar currentCalendar] maximumRangeOfUnit:NSWeekdayCalendarUnit];
    Für den gregorianischen Kalender erwarte ich ein (1,7).

    Wenn Du damit durch sämtliche möglichen Kalender durchiterierst, kannst Du sicherlich feststellen, ob eine Woche immer 7 Wochentage hat. ;)
    (Die Ägypter hatten gemäß Wikipedia 10 Tage die Woche á 36 Wochen pro Jahr.)

    Es ist also uninteressant, wie viele Tage die aktuelle Woche hat. (Genau so viele wie letzte Woche und in etwa so viele wie nächste Woche – ach ja, und genau so viele wie vor 30 Jahren.)
    Interessant ist, wie viele Tage eine Woche im aktuellen Kalender hat.
    «Applejack» "Don't you use your fancy mathematics to muddle the issue!"

    Iä-86! Iä-64! Awavauatsh fthagn!

    kmr schrieb:

    Ach, Du bist auch so ein leichtgläubiger Zeitgenosse, der alles glaubt, was irgendwelche Typen vor sich hin brabbeln. :-P

    Dieser Beitrag wurde bereits 1 mal editiert, zuletzt von Marco Feltmann ()

  • @Marco:
    Danke, das klingt doch gut. :)

    Zum letzten Satz: Es gibt ja Kalender wo nicht jedes Jahr gleich viele Monate hat.
    Daher dachte ich, das sicherste ist wirklich jeweils nach der Woche zu fragen die mich interessiert.

    Wer weiß was sich da manche Vöker für Perversitäten in der Vergangenheit ausgedacht haben. ;)

    edit:
    @Thalius, ich will bei einem wöchentlichen Zyklus seit Tag XXX wissen der wievielte Tag nach dem aktuellen Zyklusbeginn heute ist, sowie wieviele Tage im aktuellen Zyklus noch übrig sind.
    Nehmen wir an das Startdatum ist vorletzten Montag, dann wäre der letzte (zweite) Zyklus am Sonntag vorbei gewesen und am gestrigen Montag hätte der aktuelle begonnen.
    Heute wäre Tag 2 des aktuellen Zyklus und es folgen noch 5 weitere bis der Zyklus zu ende ist.

    Das eben für den jeweiligen Kalender des Nutzers anstatt fest auf unseren gecoded.

    Dieser Beitrag wurde bereits 3 mal editiert, zuletzt von Thyraz ()

  • Ok, anderer Ansatz der das Problem mit weniger Rechnerei angeht und dann auch für alles passen sollte:

    NSCalender: -components:fromDate:toDate:
    Hier nur NSCalendarUnitWeekOfYear als components übergeben.

    Das fromDate ist immer ein Datum mit Uhrzeit 0:00 in der TimeZone des Users.

    Das Startdatum des aktuellen Zykluses kann ich dann über die Anzahl der Wochen wieder über:
    NSCalendar: -dateByAddingUnit:value:toDate:options: erhalten.
    Das Startdatum des nächsten Zyklus eben über die selbe Methode mit Wochenzahl + 1

    Daraus lässt sich dann auch die Wochenlänge wieder errechnen...
  • Thyraz schrieb:

    Zum letzten Satz: Es gibt ja Kalender wo nicht jedes Jahr gleich viele Monate hat.
    Daher dachte ich, das sicherste ist wirklich jeweils nach der Woche zu fragen die mich interessiert.

    Nuja, das uns in den letzten 2000 Jahren ein paar Monate abhanden gekommen sind, ist ja bekannt.
    Ob sich dadurch aber die Wochenlänge geändert hat… (Sprich: Auf Montag folgte Freitag [sehr arbeitnehmerfreundlich] oder umgekehrt auf Freitag folgte Montag)
    Verlustige Tage/Monate und solcherlei lustige Dinge sind auch nur entstanden, weil man mal rasch vom römischen auf den julianischen auf den gregorianischen Kalender wechseln musste.

    Wie dem auch sei ist eine Woche ein eher abstraktes Konstrukt und relativ unabhängig von all den anderen Komponenten eines Kalenders.
    Das sieht man ja schon, wenn man berechnen möchte, von wann bis wann die erste Kalenderwoche ging bzw. welche Kalenderwoche gerade aktuell ist.

    Eine unterschiedliche Länge bei Monaten ist dank der seltsamen Monatsberechnungsgrundlagen möglich, eine unterschiedliche Wochenanzahl pro Jahr ebenso.
    Eine unterschiedliche Länge der Wochen aber empfinde ich als ausgesprochen störend.
    Ich kann mir einfach nicht vorstellen, dass eine Kultur, die ein Kalendersystem nutzt, meinetwegen jeden vierten Monat statt zehn Wochentage noch einen elften 'Sabbath' Tag zusätzlich einlegt.

    Unsereins kommt ja schon durcheinander, ob der Juli jetzt 30 oder 31 Tage hat. Dass der Februar mal 28, mal 29 Tage hat, aber auch nicht immer alle 4 Jahre sondern zufällig mal alle 4 Jahre… Hochkomplizierte formelhafte Scheiße.

    Wenn ich mir jetzt auch noch merken müsste, ob kommendes Wochenende zwei Tage (Samstag + Sonntag) oder drei Tage (Samstag + Sonntag + Sabbattag) hat – ich würde noch häufiger schwänzen oder am Wochenende zur Arbeit schlurfen.

    Man sollte die Komplexität nicht unterschätzen, die solcherlei Änderungen mit sich bringen.

    Zur Veranschaulichung: Kannst Du mir ohne nachzuschauen sagen, wann bei uns die MESZ endet?
    Wenn man das System einmal verstanden hat (Anfang letzter Sonntag im März 01:00 UTC; Ende letzter Sonntag im Oktober 01:00 UTC) ist es einfach.
    Wenn nicht, trifft einen die Meldung in den Nachrichten (ja, so etwas wird in den Nachrichten gesendet) wie ein unvorbereiteter Schlag.

    Bei den ganzen Datumsberechnungsorgien ist die Woche das einzig starr definierte Element: 7 Werktage in unserem Kalender.
    Scheißegal ob durch Schaltsekunden ein Tag jetzt eine Sekunde länger oder kürzer ist. Scheißegal ob wegen der Zeitumstellung ein Tag jetzt eine Stunde mehr oder weniger hat. Scheißegal ob wegen einer Kalenderumstellung auf den 18.04. der 23.09. folgt. Scheißegal ob Dank einer Interkalation auf den 30. Schevat jetzt der 1. Adar aleph oder direkt der 1. Adar folgt.
    (Auch im jüdischen Kalender gibt es trotz Schaltmonat 7 Wochentage…)

    Gestern war Dienstag weil heute Mittwoch ist dem ein Donnerstag folgt.

    Wie gesagt sind die ganzen Datumsberechnungsorgien hoch komplex. Genau deshalb würde ich das auf jeden Fall Andere machen lassen, die sich damit auskennen.
    Ich wette, das NSCalendar Team besteht aus mehreren Experten unterschiedlicher (genauer: Der unterstützten) Kalendersysteme und haben mehr Jahrzehnte Erfahrung in ihrem jeweiligen Gewohnheitkalender als wir sie je dort sammeln können.
    «Applejack» "Don't you use your fancy mathematics to muddle the issue!"

    Iä-86! Iä-64! Awavauatsh fthagn!

    kmr schrieb:

    Ach, Du bist auch so ein leichtgläubiger Zeitgenosse, der alles glaubt, was irgendwelche Typen vor sich hin brabbeln. :-P
  • Thyraz schrieb:

    Kommt da dann nach Montag einfach Mittwoch? 0_o

    ;)
    Nö, aber ich halte es für möglich, dass "53. Woche, Dienstag" + "1 Tag" "1. Woche, Mittwoch" ergibt. Das ist entspricht nicht ganz einer Zählung von sieben Tagen.

    Umgekehrt könnte bei "2. Woche, Dienstag" - "1 Woche" "53.Woche, Dienstag" herauskommen. Auch das ist zumindest überraschend.

    Ich würde einfach das berechnen, was zu berechnen ist. Was willst du denn genau?
    Es hat noch nie etwas gefunzt. To tear down the Wall would be a Werror!
    25.06.2016: [Swift] gehört zu meinen *Favorite Tags* auf SO. In welcher Bedeutung von "favorite"?
  • Thyraz schrieb:

    @Amin siehe edit in Beitrag #4

    Habe das aus Beitrag #7 gerade umgesetzt und getestet.
    Sieht gut aus. :)

    Danke für all die Anregungen hier im Thread...
    So erscheint es mir auch richtig: Genau das berechnen, was du berechnen willst. Alles andere ist ohnehin nur Geschwurbel.
    Es hat noch nie etwas gefunzt. To tear down the Wall would be a Werror!
    25.06.2016: [Swift] gehört zu meinen *Favorite Tags* auf SO. In welcher Bedeutung von "favorite"?