0

timeDate 型の attribute を持つエンティティがあります。私はそれの時間要素だけを気にします。クラス ファイルを生成するとき、プリミティブ データ型にスカラー プロパティを使用することにしました。そのため、NSTimeIntervalの代わりに が使用されNSDateます。

attributeを保存するには、エンティティに割り当てる前にtime文字列を解析する必要があります。NSDateFormatter

NSDateFormatter *dateFormatter = [[NSDateFormatter alloc] init];
[dateFormatter setDateFormat:@"H:mm"];

NSTimeInterval time = [[dateFormatter dateFromString:@"19:20"] timeIntervalSince1970];
entity.time = time;

レコードをフェッチするために述語を使用する場合、私は再びNSDateFormatter日付コンポーネントを「切り捨て」ていました。

NSDate *timeNow = [self.defaultDateFormatter dateFromString:
    [self.defaultDateFormatter stringFromDate:[NSDate date]]];
NSPredicate *predicate = [NSPredicate predicateWithFormat:@"time >= %@", timeNow];
// build the rest of the NSFetchRequest...

問題は、すべてのレコードが戻ってきたことです。一部のレコードにはtime以前に属性timeNowがあり、一部には後の属性がありました。Bueを使用して返されたレコードの属性と比較timeNowしたところ、実際に正しい結果が返されました。time[NSDate compare:]

どこが間違っていましたか?

4

1 に答える 1

2

私がよく理解できれば、H:mm の時間を追跡する必要があります。年月日は関係ありません。右?

分単位の解像度 (最大 1440) が必要な場合は int16_t を、2 番目の解像度 (最大 86400) が必要な場合は int32_t を使用しない理由と、基本単位から NSCalendar 計算用の NSDateComponents のようなニーズに最も適したものに変換するためのいくつかの非常に基本的な方法? NSDate と NSTimeInterval は、このタスクにはあまり適していませんね。

于 2012-06-11T10:15:32.037 に答える