これが私のコードです:
picker = [[UIDatePicker alloc] initWithFrame:CGRectMake(0,40,0,0)];
picker.datePickerMode = UIDatePickerModeDateAndTime;
picker.minuteInterval = 5;
picker.minimumDate = [NSDate date];
わかりました、ここまでは問題なく動作しています。(画像: http://img29.imageshack.us/img29/8277/snap1r.png )
DatePicker で過ぎた日はすべてグレー表示されていました。選択できません。分間隔は 5 です。
しかし今、すでにグレー表示されている行をクリックすると。DatePicker の日付は、現時点の時間を返します。
例:DatePicker で「9」をクリックしました (もう時間は過ぎています) そして、現在のシステム時間は
22:27:57
DatePicker の日付が返されます: (画像: http://img42.imageshack.us/img42/2760/nslog.png )
2012-04-08 22:27
私の分間隔は 5 分なので、ピッカーが 5 で割り切れない値を返すことを望みません。これにより、プログラムがクラッシュします。
これはバグですか?それとも私の問題ですか?ありがとう!
------検査官gへ(英語が下手ですみません)
Datepicker の minuteInterval は 5 なので、DatePicker の date の戻り値は 5 で割り切れる分 (0, 5 , 10 , 15 など) のみを返します。
また、プロパティ minimumDate を [NSDate date] に設定しているため、ユーザーは過去の日付を選択できません。
しかし、ユーザーが過去の行 (灰色表示) をクリックすると、DatePicker の日付はその時点の時刻を返します。
したがって、日付の分は任意の値(0〜60)にすることができますが、希望するものではありません(0、5、10、15 ....)
私は説明するために最善を尽くしました>"<許してください。
検査官へ g.
あなたのコードをありがとう、私は突然私の問題を解決する良い方法があることに気付きました. しかし、理由はわかりません。あなたのコードを使用すると、いくつかの問題が発生します。(timeZoneくらいだと思います)
しかし、私はあなたの論理に従い、コードを書き直します。あなたと共有します:
unsigned unitFlags_ = NSYearCalendarUnit | NSMonthCalendarUnit | NSDayCalendarUnit | NSHourCalendarUnit | NSMinuteCalendarUnit;
NSCalendar *gregorian = [[NSCalendar alloc] initWithCalendarIdentifier:NSGregorianCalendar];
NSDateComponents *comps_ = [gregorian components:unitFlags_ fromDate:[jRemindPicker date]];
NSInteger remainder = [comps_ minute] % 5;
NSLog(@"%i-%i-%i %i:%i", comps_.year, comps_.month, comps_.day, comps_.hour, comps_.minute);
if ( remainder ) {
/* My Own code /*
} else {
/* My Own Code /*
}
[gregorian release];