如何从 NSDate 获得 1 小时的未来时差

How to get future time difference of 1 hour from NSDate

我想为用户启用一项功能,使其仅在当前时间 1 小时后执行一项功能。我到底应该在下面的代码中传递 toDate 参数来获得与当前时间相差 1 小时的未来时差?我不知道如何在 NSDateFormatterNSDateComponents 中设置未来时间。所以不能写我试过的东西。

- (NSInteger)timeDifference:(NSDate *)fromDate ToDate:(NSDate *)toDate
{

    NSLog(@" FromDate: %@, ToDate: %@",fromDate,toDate);

    NSCalendar *calendar = [NSCalendar currentCalendar];
    NSDateComponents *differenceValue = [calendar components:NSHourCalendarUnit
                                                    fromDate:fromDate toDate:toDate options:0];
    NSLog(@"Calculated hour difference : %d",[differenceValue hour]);
    NSInteger hourDifference = [differenceValue hour];

    NSLog(@" HourDifference: %d",hourDifference);
    return hourDifference;
}

如果您想创建一个比特定日期晚一小时的日期,您可以使用 dateByAddingTimeInterval 方法,例如:

NSDate *date = [NSDate date];
NSDate *plusOneHour = [date dateByAddingTimeInterval:60.0f * 60.0f];

NSLog(@"%@, %@", date, plusOneHour);

已更新

如@uchuugaka 所述,您可以使用日历方法找到版本 here

查看 NSCalendar header 以获取方便的方法。另请观看 2013 年关于日历计算主题的 WWDC 视频。 将这些东西放入文档中的速度非常慢,简单地添加时间间隔很多时候都是错误的。所有组件对于正确执行此操作都很重要。您需要有一个日历和一个时区才能增加语义上有意义的小时数。

处理各地不一样的午夜、闰年和夏令时时,这是一个陷阱。

特别是在这种情况下,我会推荐 NSCalendar.h

/*
    This API returns a new NSDate object representing the date calculated by adding an amount of a specific component to a given date.
    The NSCalendarWrapComponents option specifies if the component should be incremented and wrap around to zero/one on overflow, and should not cause higher units to be incremented.
*/
- (NSDate *)dateByAddingUnit:(NSCalendarUnit)unit value:(NSInteger)value toDate:(NSDate *)date options:(NSCalendarOptions)options NS_AVAILABLE(10_9, 8_0);

但是 header 中有几种方法就足够了。请仔细观看 WWDC 视频几遍。非常值得您花时间,您的用户体验会更好。