2013-04-28 59 views
3

我对一个问题感到困惑。我不明白我犯了什么错误UIDatePicker minimumdate

我需要在1810年左右为我的UIDatePicker创建最低日期。所以我尽量使它像

datePicker.minimumDate = [[NSDate alloc] initWithTimeIntervalSince1970: - (60 * 60 * 24 * 365 * 160)]; 

但我得到错误minimumdate: enter image description here

所以我去的其他方式,并解决了这个问题

NSCalendar *calendar = [[NSCalendar alloc] initWithCalendarIdentifier:NSGregorianCalendar]; 
NSDateComponents *comps = [NSDateComponents new]; 
comps.year = -160; 
datePicker.minimumDate = [calendar dateByAddingComponents:comps toDate:[NSDate dateWithTimeIntervalSince1970:0] options:0]; 

但我can'nt明白为什么第一种情况我得到错误最低日期

+0

所有日子都不一样。日光,飞跃..... – 2013-04-28 08:13:56

+0

我想知道如果你做了明确的“'-1 * 60 * 60 * ...'”,问题是否会消失? – 2013-04-28 08:15:20

+1

尝试'60.0 * 60 * 24 * 365 * 160' **使其中一个然后浮动** – 2013-04-28 08:23:34

回答

4
datePicker.minimumDate = [[NSDate alloc] initWithTimeIntervalSince1970: - (60 * 60 * 24 * 365 * 160)]; 

160年不是60 sec * 60 min * 24 hours * 365 days

您没有考虑各种因素,最容易知道的一个是闰年。

编辑:

使用60.0 * 60 * 24 * 365 * 160做的,然后浮之一,因此其结果将是float,你可能会超过INT32(IOS)的范围。

+1

这可能是真的,但他的结果1946年的年代远不及1810年,所以我不认为闰年的错误计算是这里的问题。 – 2013-04-28 08:18:54

+1

@MichaelDautermann:在阅读纳坦的回答后,我猜他是对的,他不应该尝试使用double而不是int。尝试60.0 * 60 * 24 * 365 * 160 **使一个然后浮动** – 2013-04-28 08:25:24

1

在我看来,这与int的最大值有关。使这个乘法运算结果为5.045.760.000,并且如你所做的那样乘以整数而不是60.0 * 60.0,这可能是它失败的原因。

试着直接把我在这里发布的数字,或者只是声明为浮点数并传入方法,或使其中一个浮点数,以便结果为浮点数: - 60.0 * 60 * 24 * 365 * 160

+0

这听起来不错 – 2013-04-28 08:25:48