1

我有一种奇怪的情况,但这里有。我试图判断一个时间是否在另外两个之间。我得到了那个工作。问题是,第二次将在第二天。例如,第一次是晚上 8 点,第二次是早上 8 点。问题是当我比较两次时,计算机认为上午 8 点在晚上 8 点之前。所以这是我的主要问题。我怎么能做到第二天是第一天之后的一天,或者在某种意义上说是明天。就像今天是第一次,第一次是晚上 8 点,但第二次是早上 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 pm

data.sleepModeBegin = 晚上 8 点

data.sleepModeEnd = 上午 8 点

我想要它以便它记录它的工作,但是因为第二个是早上 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 点

第二个日期选择器设置在上午 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
4

2 回答 2

2

NSDate表示绝对时间点(包括日期)。“仅时间”模式下的日期选择器返回所选时间以及“当前日期”。

如果要添加一天,请使用NSCalendarand NSDateComponents

NSCalendar *cal = [NSCalendar currentCalendar];
NSDateComponents *dateComponents = [[NSDateComponents alloc] init];
[dateComponents setDay:1];
NSDate *sleepEndTomorrow = [cal dateByAddingComponents:dateComponents 
                                  toDate:sleepEndToday options:0];
于 2013-09-07T16:45:18.327 回答
-4

您可以将您的时间转换为 epoc 秒 - nstime 方法 timeIntervalSince1970 将是 Objective-c 的答案。

于 2013-09-07T16:01:35.170 回答