私は現在、学校のスケジュールを処理するスケジューリングアプリケーションを作成しています。各スケジュールには、開始時刻と終了時刻の両方を含む期間オブジェクトの配列があります。現在、これらの時刻はNSDateオブジェクトとして保存されています。ここでは、時刻のみが実際に関連しており、各NSDateオブジェクトには、アプリケーションにとってほとんど重要ではない任意の日付が関連付けられています(UIDatePickerが割り当てたものは何でもですが、TimePickerModeのみを使用します) )。私はこれらの日付で多くのことをします。まず、NSDateFormatterを使用して、UITableViewの各期間の時間の文字列表現を出力します。次に、[NSDate date]によって取得された現在の時刻を開始時刻と終了時刻と比較することにより、その日の現在の期間を見つけようとします。しかし、私はこれを行うための最良の方法を決定するのに苦労しています。
現在、NSDateFormatterを使用して開始時刻と終了時刻を文字列に変換してから、今日の日付と同じ日付の日付に戻しています。その後、-(NSComparisonResult)compareを使用して日付の比較を行うことができます。開始日と終了日を現在の日付と比較します。しかし、これは非常に非効率的であると私は見ることができました。
他の可能な方法は、各NSDateをNSDateComponentsに変換してから、NSCalendarを使用して、現在の日付と同じ元の時刻を持つNSDateに変換し直すことです。
または、別のアプローチを取り、NSDateストレージ手法を完全に廃止することもできます。代わりに、各開始時刻と終了時刻をNSDateComponentsとして保存できます。その後、UITableViewの時刻のフォーマットされたバージョンを出力するのに十分簡単で、[NSDate date]によって取得された日付をNSDateComponentsに変換して、論理に使用できます。現在の期間を取得するための比較。
これについては3つまたは4つの異なる方法がありますが、実際に話し合った後、さまざまなタイプの日付オブジェクト間で実行時の変換が最小限で済むため、最後に説明した方法が最も効率的であると確信しています。私は他の人の意見を探しています。