NSDate年份回报"1604"?

Oma*_*arj 12 iphone objective-c nsdate abaddressbook ios

我试图获取联系人的出生数据但是如果用户没有选择年份或者联系人来自Facebook和年份或者自己的数据是隐藏的那么它给了我年份的"1604"值你可以看到我意思是在图像中.

在此输入图像描述

在此输入图像描述

Dav*_*ong 21

恭喜,您已经发现了一个实现细节!

首先,联系人将日期存储为时间点,并且不可能存储没有一年的时间点,因为每个时间点都有一年.因此,必须决定地址簿如何在日期中存储"未知"年份.由于以下几个原因,决定"1604"将是一个好年头:

  1. 当你在谈论地址簿时,你的地址簿中的任何人都不太可能在1604年出生.
  2. 1604是闰年(根据闰年的计算规则),这意味着如果你不知道出生年份的人是在2月29日出生的,那么1604也可以处理.
  3. 1604年是Julian-Gregorian日历开关之前.

因此,如果你从地址簿中提取出生日期,你需要特殊情况1604作为"未知年份的生日".

注意:据我所知,只有在处理公历时才支持此功能.对于所有其他日历,此行为未定义.

  • @Omarj是的.您可以使用Gregorian`NSCalendar`提取年份以获得适当的`NSDateComponents`. (2认同)