如何从 NSDate 获得 1 小时的未来时差
How to get future time difference of 1 hour from NSDate
我想为用户启用一项功能,使其仅在当前时间 1 小时后执行一项功能。我到底应该在下面的代码中传递 toDate
参数来获得与当前时间相差 1 小时的未来时差?我不知道如何在 NSDateFormatter
或 NSDateComponents
中设置未来时间。所以不能写我试过的东西。
- (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 视频几遍。非常值得您花时间,您的用户体验会更好。
我想为用户启用一项功能,使其仅在当前时间 1 小时后执行一项功能。我到底应该在下面的代码中传递 toDate
参数来获得与当前时间相差 1 小时的未来时差?我不知道如何在 NSDateFormatter
或 NSDateComponents
中设置未来时间。所以不能写我试过的东西。
- (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 视频几遍。非常值得您花时间,您的用户体验会更好。