UIDatePicker最小日期

3

我有一个问题感到困惑。我不理解我的错误在哪里。

我需要在我的UIDatePicker中设置最小日期为1810年左右。因此,我尝试像这样设置:

    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];

但是我不明白为什么在第一个情况下我得到了错误的最小日期


所有的日子都不一样。白天、闰年…… - Anoop Vaidya
我想知道如果你明确地使用“-1 * 60 * 60 * ...”是否可以解决这个问题? - Michael Dautermann
1
尝试将 60.0 * 60 * 24 * 365 * 160 中的一个转换为浮点数。 - Anoop Vaidya
Anoop Vaidya,是的,它有助于解决问题 =)请编写您的答案以进行检查,如最佳答案。 - user2213271
2个回答

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

160年不等于60秒×60分钟×24小时×365天

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

编辑:

使用60.0 * 60 * 24 * 365 * 160将其中一个数变为浮点数,这样结果将是float类型,因为可能超过int32(ios)范围。


1
这可能是真的,但他1946年的结果远不及1810年,所以我不认为闰年计算错误是问题所在。 - Michael Dautermann
1
@MichaelDautermann:阅读了Natan的答案后,我猜他是对的,他不应该尝试使用int而应该使用double。尝试将60.0 * 60 * 24 * 365 * 160中的一个变成float。 - Anoop Vaidya

1
在我看来,这与int的最大值有关。进行这种乘法运算会得到5,045,760,000,由于您进行的是整数乘法而不是60.0 * 60.0的乘法,所以可能是失败的原因。

尝试直接输入我在此处发布的数字,或将其声明为float并传递给方法,或使其中一个变量成为float,以便结果将是float:- 60.0 * 60 * 24 * 365 * 160


网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接