3

我对一个问题感到困惑。我不明白我在哪里犯了错误

我需要在 1810 年附近为我的 UIDatePicker 设置最小日期。所以我试着让它像

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

但我得到错误的最小日期: 在此处输入图像描述

所以我走了另一条路并解决了问题

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

但我不明白为什么在第一种情况下我得到错误的 minimumdate

4

2 回答 2

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) 范围。

于 2013-04-28T08:17:00.597 回答
1

在我看来,这与 int 的最大值有关。进行此乘法运算会得到 5.045.760.000,并且正如您所做的那样,它是整数的乘法,而不是 60.0 * 60.0,也许这就是它失败的原因。

尝试直接输入我在此处发布的数字,或者将其声明为浮点数并传递给方法,或者将其中一个浮点数设为浮点数:- 60.0 * 60 * 24 * 365 * 160

于 2013-04-28T08:18:16.153 回答