0

coreData モデルが既にセットアップされており、データが追加されています。過去 30 日間のすべてのアイテムを検索し、合計ユニット数を合計したいと考えています。

これが私が得たものです:-

- (void) calculateThirtyDayValues {

NSDate *endDate = [NSDate date];
NSTimeInterval timeSinceRefDate = [NSDate timeIntervalSinceReferenceDate];
NSTimeInterval lastThirtyDays = timeSinceRefDate- 2592000;
NSDate *startDate = [NSDate dateWithTimeIntervalSinceReferenceDate:lastThirtyDays];
NSPredicate *predicate = [NSPredicate predicateWithFormat: @"(date >= %@) AND (date <=     %@)", startDate, endDate];

}

基本的に、今日の日付に設定された NSDate オブジェクトを作成してから、今日の 30 日前に設定された別の NSDate オブジェクトを作成しました。次に、開始日から現在の日付までのすべてのオブジェクトを述語しようとします。

結果が返ってきましたが、過去 30 日間の合計と実際には一致していないようです。すべてを返すだけのようです!

何か案は?

4

1 に答える 1

1

述語は問題ないように見えますが、いくつかの理由で日付コードが正しくありません。

  • [NSDate date]サブミリ秒の精度で現在の日付を返します。したがって、現地時間の午後 4 時 15 分 37 秒に述部を作成すると、この述部は現地時間の午後 5 時 37 分 42 秒の日付を持つオブジェクトを検出しません。そのような秒単位の精度が必要な場合は、おそらく問題ありません。ただし、別のカレンダー単位 (日単位など) に細分化する必要がある場合は、さらに多くの作業を行う必要があります。
  • 毎日 86,400 秒あるわけではありません。したがって、(30*86400) を減算しようとする試みは微妙に間違っています。カレンダー オブジェクトに計算を行わせる必要があります。

    NSDate *endDate = ...;
    NSDateComponents *diff = [[NSDateComponents alloc] init];
    [diff setDay:-30];
    NSCalendar *calendar = [NSCalendar currentCalendar];
    NSDate *startDate = [calendar dateByAddingComponents:diff toDate:endDate options:0];
    
于 2012-11-17T15:38:06.737 に答える