2009-08-26 2 views
2

Я хочу, чтобы иметь возможность конвертировать между григорианскими и юлианскими календарями (обратите внимание: не «юлианская дата»), используя NSCalendar на iPhone. Как я могу подклассифицировать NSCalendar для использования юлианского календаря? Я хочу сделать это без уважения в отношении 1582 или 1752 или любого года.Создание нового календаря NSCalendar

ответ

1

Хотя вы можете наверняка пойти на это, но я подозреваю, что NSCalendar сложно подклассы. Это бесплатный мостовой, что усложняет ситуацию; переплетается с NSLocale, что усложняет вещи; он инициализируется идентификаторами, а не подклассом, что усложняет ситуацию; и не дает никаких указаний о том, какие методы являются его примитивами, которые ... усложняют ситуацию ...

Вам нужен подкласс, чтобы подключить существующую архитектуру? В противном случае было бы проще всего создать объект с нуля, имеющий аналогичный интерфейс. Вы можете использовать NSGregorianCalendar для выполнения большинства работ для вас и просто компенсировать дату за необходимые дни перед вычислением компонентов даты. Вам понадобится специальная логика для 1700, 1800 и 1900 (и, конечно, 2100 и т. Д.), Так как NSGregorianCalendar не позволит вам создавать компоненты даты в високосный день в те годы, но это все же, вероятно, проще, чем выполнение всего компонента даты расчеты вручную.

Любопытно, какова была цель такого календаря?

+0

Моя церковь использует юлианский календарь в наших наблюдениях. Я занимаюсь написанием программы, в которой будут перечислены предстоящие мероприятия. Например, 25 декабря в юлианском календаре в настоящее время 13 дней (7 января) по григорианскому календарю. Я мог бы легко написать что-то, что займет текущую дату в соответствии с григорианским календарем и вычесть 13 дней, чтобы указать дату в юлианском календаре. Проблема в том, что день недели был бы неправильным (ср., 7 января 2009 г. по григорианскому календарю - ср. 25 декабря 2008 г. по юлианскому календарю, а не по четвергам). Наверное, мне придется просто рубить его вручную. – 2009-08-27 01:50:52

+0

Я предполагаю, что вам не придется беспокоиться о следующем дивергентном високосном году (в феврале 2100 года), поэтому кажется, что вы можете рассчитать день недели из григорианского календаря, а затем вычесть 13 дней, чтобы получить оставшуюся часть даты компоненты юлианской даты. Не элегантный, но эффективный в течение нескольких десятилетий. И быстро закодировать. –

 Смежные вопросы

  • Нет связанных вопросов^_^