1

オブジェクトはNSDate、2012 年 9 月 4 日午後 10 時 CDT など、絶対的な日付と時刻を表します。NSDateこれは、特定の瞬間にイベントが実際に発生した場合には問題なく機能しますが、繰り返し発生するイベントを扱う場合は、はるかに面倒です。たとえば、私は現在、ビジネスの営業時間を保存するアプリに取り組んでいます。ほとんどのビジネスには週ごとのスケジュールがあります。つまり、日付に関係なく、平日ごとの時間を保存したいと考えています。

いくつかの解決策があります。曜日、時間、および分の属性を持つ追加のエンティティ (私は Core Data で作業しています)、Hours を作成し、そのように把握します。これは単純な表示には有効ですが、「ステータス」も追加します (「x までオープン」、「y 分でクローズ」、「z でオープン」など)。つまり、比較を行うオブジェクトを作成するかNSDate、 current の曜日、時間、および分のプロパティを取得する必要がありますNSDate

もう 1 つのオプションは、 1 つNSDateのビジネス (開店と閉店) ごとに 2 つの を格納し、実際の日付を無視して、曜日、時間、および分のプロパティのみを使用することです。私はこれを試しましたが、日付を比較できるようにするには、NSDateオブジェクトを操作する必要があります。

これらは私が思いついた解決策です。どちらも多くの数学を必要とし、多数の ifs、buts、mayves を伴います。私がすべてを行うことができるある種の「NSTime」オブジェクトを単純に持つことは本当に簡単ですが、それは存在しません(ないようです)。

他の誰かが同じ問題を抱えていて、より良い解決策を見つけましたか?

4

2 に答える 2

3

独自の抽象化を作成する方がよいと思います。これは、解決しようとしている問題により適しています。ヘルプのヒント:

  • Fowler のカレンダー (pdf)パターンの定期的なイベント。
  • ice_cube : 定期的なイベント用の ruby​​ ライブラリ (デザイン アイデア用)。
于 2012-09-05T03:30:51.333 に答える
2

私がすべてを行うことができるある種の「NSTime」オブジェクトを単純に持つことは本当に簡単ですが、それは存在しません(ないようです)。

1 つのオプションは、NSDateComponents を使用することです。これには、時間、分、秒など、関心のある日付の部分だけを格納できます。

本当に時刻を保存したいだけなので、独自の Time クラスを作成するという別のオプションがあります。NSDate は、時間の瞬間を単一の数値として保存します。固定時間からの秒数、エポックです。Time クラスは、基準点として真夜中を使用することを除いて、ほぼ同じことを行うことができます。ただし、1 日の終わり以降の時間を指定できない場合は、問題が発生する可能性があります。たとえば、レストランが午前 2 時まで営業している場合、レストランが開店した日を基準にしてそれを表すことができます。おそらくより良いオプションは、Time クラスで内部的に NSDate を使用することですが、常に固定の開始日を使用することです。

于 2012-09-05T04:01:08.033 に答える