在我的时间增加1天

时间:2013-09-07 15:52:55

标签: iphone ios objective-c nsdate

我有点奇怪的情况,但是这里有。我想告诉一个时间是否介于两个人之间。我有那个工作。问题是,第二次将在第二天。例如,第一次是晚上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

data.sleepModeBegin =晚上8点

data.sleepModeEnd =上午8点

我希望它能让它记录下来,但是因为第二个是早上8点,它认为是那天早上我希望山雀能够在早上看到


修改

Martins回答后的代码

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

2 个答案:

答案 0 :(得分:2)

NSDate表示绝对时间点(包括当天)。  “仅限时间”模式下的日期选择器返回 选定的时间和“当天”。

如果您想添加一天,请使用NSCalendarNSDateComponents

NSCalendar *cal = [NSCalendar currentCalendar];
NSDateComponents *dateComponents = [[NSDateComponents alloc] init];
[dateComponents setDay:1];
NSDate *sleepEndTomorrow = [cal dateByAddingComponents:dateComponents 
                                  toDate:sleepEndToday options:0];

答案 1 :(得分:-4)

您可以将时间转换为纪元秒数 - nsdate方法timeIntervalSince1970将是objective-c的答案。