3

1つの質問で混乱しています。どこを間違えたのかわからない

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

しかし、最初のケースで最小日付が間違っている理由がわかりません

4

2 に答える 2

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

160年ではありません60 sec * 60 min * 24 hours * 365 days

さまざまな要因を考慮していませんでしたが、最も簡単に知ることができるものの 1 つはうるう年です。

編集:

そのうちの 1 つをフロートにするために使用60.0 * 60 * 24 * 365 * 160するため、結果はfloatint32(ios) の範囲を超える可能性があります。

于 2013-04-28T08:17:00.597 に答える
1

私の意見では、これは int の最大値に関係しています。この乗算を行うと、結果は 5.045.760.000 になります。これは、60.0 * 60.0 ではなく整数の乗算である可能性があり、これが失敗の原因です。

ここに投稿した数値を直接入力するか、浮動小数点数として宣言してメソッドに渡すか、そのうちの 1 つを浮動小数点数にして、結果が浮動小数点数になるようにしてください: - 60.0 * 60 * 24 * 365 * 160

于 2013-04-28T08:18:16.153 に答える