私は奇妙な状況に陥っていますが、ここに行きます。ある時間が他の 2 つの時間の間にあるかどうかを判断しようとしています。私はそれを働かせました。問題は、2回目が翌日になることです。たとえば、1 回目は午後 8 時、2 回目は午前 8 時です。そして問題は、私が 2 つの時間を比較すると、コンピュータは午前 8 時が午後 8 時より前であると判断することです。これが私の主な質問です。2日目が1日目の翌日、ある意味では明日になるようにするにはどうすればよいでしょうか。たとえば、今日が 1 回目の場合、1 回目は 1 回目は午後 8 時ですが、2 回目は 2 回目は午前 8 時になります。
編集
これまでの私のコード
NSDate *notificationDate =
[NSDate dateWithTimeInterval:data.postureInterval sinceDate:[NSDate date]];
if([notificationDate compare:data.sleepModeBegin] == NSOrderedDescending &&
[notificationDate compare:data.sleepModeEnd] == NSOrderedAscending)
{
NSLog(@"IT works");
}
発生する通知 = 午後 8 時 30 分
data.sleepModeBegin = 午後 8 時
data.sleepModeEnd = 午前 8 時
動作をログに記録するようにしたいのですが、2 つ目は午前 8 時なので、シジュウカラを明日の朝にしたい朝だと思います。
編集
マーティンの回答後の私のコード
NSCalendar *cal = [NSCalendar currentCalendar];
NSDateComponents *dateComponents = [[NSDateComponents alloc] init];
[dateComponents setDay:1];
NSDate *sleepEndTomorrow = [cal dateByAddingComponents:dateComponents toDate:data.sleepModeEnd options:0];
NSDate *notificationToHappen = [NSDate dateWithTimeInterval:data.postureInterval sinceDate:[NSDate date]];
NSLog(@"%@", notificationToHappen);
NSLog(@"%@", data.sleepModeBegin);
NSLog(@"%@", data.sleepModeEnd);
NSLog(@"%@", sleepEndTomorrow);
NSLog(@"%@", [NSDate date]);
if (([notificationToHappen compare:data.sleepModeBegin] == NSOrderedDescending) && ([notificationToHappen compare:sleepEndTomorrow] == NSOrderedAscending) ) {
NSLog(@"HEY");
}
最初の日付ピッカーは午後 3 時に設定されます
2 番目の日付ピッカーは午前 8 時に設定されます
出力は
2013-09-07 16:04:22.981 MyPosturePal[40145:a0b] 2013-09-07 20:15:22 +0000
2013-09-07 16:04:22.982 MyPosturePal[40145:a0b] 2013-09-06 19:00:41 +0000
2013-09-07 16:04:22.982 MyPosturePal[40145:a0b] 2013-09-06 12:00:41 +0000
2013-09-07 16:04:22.982 MyPosturePal[40145:a0b] 2013-09-07 12:00:41 +0000
2013-09-07 16:04:22.983 MyPosturePal[40145:a0b] 2013-09-07 20:04:22 +0000