2009-08-26 6 views
2

Ich möchte mit dem NSCalendar auf dem iPhone zwischen den Gregorianischen und Julianischen Kalendern (Anmerkung: nicht "Julian-Datum") konvertieren können. Wie kann ich NSCalendar ableiten, um den Julianischen Kalender zu verwenden? Ich möchte dies ohne Rücksicht auf 1582 oder 1752 oder irgendein bestimmtes Jahr tun.Erstellen eines neuen NSCalendar-Kalenders

Antwort

1

Während Sie sicherlich daran gehen können, aber ich vermute, dass NSCalendar ist schwierig zu Unterklasse. Es ist gebührenfrei gebrückt, was die Dinge komplizierter macht; ist mit NSLocale verknüpft, was die Dinge komplizierter macht; Es wird mit Kennungen initialisiert, anstatt subclassiert zu werden, was die Dinge komplizierter macht; und gibt keine Anleitung, welche Methoden sind seine Primitiven, die Dinge kompliziert ...

Benötigen Sie die Unterklasse, um in eine bestehende Architektur einstecken? Wenn nicht, wäre es wahrscheinlich am einfachsten, ein Objekt von Grund auf neu zu erstellen, das eine ähnliche Schnittstelle hat. Sie können möglicherweise einen NSGregorianCalendar verwenden, um den Großteil der Arbeit für Sie zu erledigen, und das Datum um die erforderlichen Tage versetzen, bevor Sie die Datumskomponenten berechnen. Sie benötigen eine spezielle Logik für 1700, 1800 und 1900 (und natürlich 2100 usw.), da NSGregorianCalendar Ihnen nicht zulässt, dass Sie Datumskomponenten für einen Schalttag in diesen Jahren erstellen, aber das ist wahrscheinlich immer noch einfacher als die gesamte Datumskomponente Berechnungen von Hand.

Nur neugierig, was das Ziel eines solchen Kalenders wäre?

+0

Meine Kirche verwendet den Julianischen Kalender in unseren Beobachtungen. Ich bin dabei, ein Programm zu schreiben, das kommende Veranstaltungen auflisten wird. Zum Beispiel ist der 25. Dezember auf dem Julianischen Kalender derzeit 13 Tage später (7. Januar) auf dem Gregorianischen Kalender. Ich könnte leicht etwas schreiben, das das aktuelle Datum gemäß dem Gregorianischen Kalender nehmen würde und 13 Tage subtrahieren, um das Datum auf dem Julianischen Kalender zu geben. Das Problem ist, der Wochentag wäre falsch (Mi, 7. Jan. 2009 auf dem Gregorianischen Kalender steht am 25. Dez. 2008 auf dem Julianischen Kalender, nicht Do). Ich denke, ich müsste es einfach von Hand hacken. –

+0

Ich nehme an, dass Sie sich keine Gedanken über das nächste abweichende Schaltjahr (im Februar 2100) machen müssen, also klingt es, als könnten Sie den Wochentag aus dem Gregorianischen Kalender berechnen und dann 13 Tage subtrahieren, um den Rest des Datums zu erhalten Komponenten des Julianischen Datums. Nicht elegant, aber mindestens für ein paar Jahrzehnte wirksam. Und schnell zu programmieren. –