2009-08-26 8 views
2

Je veux être en mesure de convertir entre les calendriers grégorien et julien (note: pas "julian date") en utilisant NSCalendar sur l'iPhone. Comment puis-je sous-classer NSCalendar pour utiliser le calendrier julien? Je veux faire cela sans égard pour 1582 ou 1752 ou une année donnée.Créer un nouveau calendrier NSCalendar

Répondre

1

Alors que vous pouvez certainement y aller, mais je soupçonne que NSCalendar est difficile à sous-classer. C'est sans frais ponté, ce qui complique les choses; est entrelacé avec NSLocale, ce qui complique les choses; il est initialisé avec des identifiants plutôt que d'être sous-classé, ce qui complique les choses; et ne donne aucune indication sur les méthodes qui sont ses primitives qui ... compliquent les choses ...

Avez-vous besoin de la sous-classe pour vous brancher sur une architecture existante? Sinon, il serait probablement plus facile de créer un objet à partir de zéro qui a une interface similaire. Vous pouvez peut-être utiliser un NSGregorianCalendar pour effectuer la majeure partie du travail et simplement compenser la date par les jours requis avant le calcul des composants de date. Vous aurez besoin d'une logique spéciale pour 1700, 1800 et 1900 (et bien sûr 2100, etc.) puisque NSGregorianCalendar ne vous permettra pas de créer des composants de date pour un jour bissextile pendant ces années, mais c'est probablement plus facile que de faire tout le composant date calculs à la main.

Juste curieux de savoir quel serait l'objectif d'un tel calendrier?

+0

Mon église utilise le calendrier julien dans nos observances. Je cherche à écrire un programme qui énumérera les observances à venir. Par exemple, le 25 décembre sur le calendrier julien est actuellement 13 jours plus tard (7 janvier) sur le calendrier grégorien. Je pourrais facilement écrire quelque chose qui prendrait la date actuelle selon le calendrier grégorien et soustrais 13 jours pour donner la date sur le calendrier julien. Le problème est, le jour de la semaine serait faux (mercredi 7 janvier 2009 sur le calendrier grégorien est le mercredi 25 décembre 2008 sur le calendrier julien, pas jeudi). Je suppose que je devrais juste le pirater à la main. –

+0

Je suppose que vous ne devrez pas vous inquiéter de la prochaine année bissextile divergente (en février 2100), il semble donc que vous puissiez calculer le jour de la semaine à partir du calendrier grégorien, puis soustraire 13 jours pour obtenir le reste de la date composants de la date julienne. Pas élégant, mais efficace pour quelques décennies au moins. Et rapide à coder. –

Questions connexes