Подтвердить что ты не робот

NSDate возвращает "1604" за год?

Я пытаюсь получить данные о рождении для контактов, но если пользователь не выбирает год или контакт приходит из Facebook, а год или данные, которые он скрывает, он дает мне значение "1604" за год. посмотрите, что я имею в виду.

enter image description here

enter image description here

4b9b3361

Ответ 1

Поздравляем, вы обнаружили деталь реализации!

Во-первых, Контакты хранят даты как точки во времени, и невозможно сохранить точку во времени без года, потому что каждый момент времени имеет год. Таким образом, должно быть принято решение о том, как адресная книга будет хранить "неизвестный" год в дате. Было решено, что "1604" будет прекрасным годом по нескольким причинам:

  • Когда вы говорите о адресной книге, маловероятно, что в вашей адресной книге будет кто-то, кто родился в 1604 году.
  • 1604 был високосным годом (по правилам расчета летных лет), а это означает, что если человек, чей год рождения, который вы не знаете, родился 29 февраля, тогда 1604 мог бы справиться и с этим.
  • 1604 был до юлианско-григорианского переключателя календаря.

Таким образом, если вы вытаскиваете даты рождения из адресной книги, вам необходимо указать специальный номер 1604 как "дата рождения, где год неизвестен".

Примечание. Насколько мне известно, это поддерживается только при работе с григорианским календарем. Для всех других календарей это поведение undefined.

Ответ 2

Вы можете запустить год в viewDidLoad.

Или проверьте, не выбрал ли год пользователь, настоящее сообщение об ошибке.