如何从 NSDate 获得 1 小时的未来时差 [重复]
Posted
技术标签:
【中文标题】如何从 NSDate 获得 1 小时的未来时差 [重复]【英文标题】:How to get future time difference of 1 hour from NSDate [duplicate] 【发布时间】:2015-04-05 14:58:36 【问题描述】:我想为用户启用一项功能,使其仅在当前时间 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;
【问题讨论】:
【参考方案1】:如果要创建比特定日期晚一小时的日期,可以使用dateByAddingTimeInterval
方法,例如:
NSDate *date = [NSDate date];
NSDate *plusOneHour = [date dateByAddingTimeInterval:60.0f * 60.0f];
NSLog(@"%@, %@", date, plusOneHour);
更新
正如@uchuugaka 所说,您可以使用日历方法here 找到版本。
【讨论】:
这是一种幼稚且不正确的做法,会导致错误。 @uchuugaka 我从来没有听说过这种方法不能正常工作,但你可能是对的。 它会在很长一段时间内工作,但 NSDate 是时间间隔的薄包装,不知道日历和时区的人为部分。从某种意义上说是正确的。但实际上,它忽略了所有与此相关的疯狂事情,即立法任意的极端案例。 @uchuugaka 你是对的,我找到了一个较旧的答案,它有正确的日历方法来解决这个问题,我用一个链接更新了我的答案。【参考方案2】:查看 NSCalendar 标头以获取方便的方法。另请观看 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);
但该标头中有几种方法就足够了。请仔细观看 WWDC 视频几次。非常值得您花时间,您的用户体验会更好。
【讨论】:
以上是关于如何从 NSDate 获得 1 小时的未来时差 [重复]的主要内容,如果未能解决你的问题,请参考以下文章
如何获得两个日期的时差,例如 x 天 y 小时 z 秒 t 分钟 [重复]