如何向 NSDate 添加时间间隔?
Posted
技术标签:
【中文标题】如何向 NSDate 添加时间间隔?【英文标题】:How to add a time interval to an NSDate? 【发布时间】:2011-01-20 17:14:55 【问题描述】:我有一个NSDate
和一个持续时间。我需要得到持续时间后的时间
鉴于: 日期为“2010-02-24 12:30:00 -1000” 持续时间为 3600 秒
我需要得到“2010-02-24 13:30:00 -1000”
我认为dateWithTimeIntervalSinceReferenceDate:
可以解决问题,但我现在看到这给出了 2001 年 1 月 1 日格林威治标准时间的日期偏移量。
我需要使用另一个 C 函数吗
【问题讨论】:
【参考方案1】:正如 DyingCactus 所说,您可以使用 NSDate 的 addTimeInterval 方法,但根据操作系统版本,会产生编译器警告,因为它在 2009 年 8 月 17 日的 10.6 中已弃用。
目前推荐的方法是在 NSDate 上使用 dateByAddingTimeInterval:
NSDate *newDate = [oldDate dateByAddingTimeInterval:3600];
请注意,如果您的目标是 10.5 或更早版本,则原始答案将有效。
【讨论】:
感谢所有回答的人。我没有很好地阅读这个文档。【参考方案2】:您需要类方法dateWithTimeInterval:sinceDate:
,它采用开始日期和间隔NSDate docs
【讨论】:
我找不到 dateWithTimeInterval:sinceDate,但现在你让我再看一遍,我确实看到了 initWithTimeInterval:sinceDate:。那成功了。谢谢。dateWithTimeInterval:sinceDate
是一个类方法,而不是一个实例方法,它将结果作为自动释放的 NSDate 返回。你最终会习惯命名约定。
好的,我明白为什么我没有看到 dateWithTimeIntervalSinceDate。您的链接是 Mac OSX 参考库。它不适用于 iPhone。但正如其他人指出的那样,iPhone 上还有其他几种方法可以做到这一点。
您的标签中提到了 Cocoa 而不是 Cocoa-touch,而且没有任何关于 iPhone 的内容,因此您得到的答案基于 Desktop SDK 也就不足为奇了。我已经为你更正了标签。【参考方案3】:
可以使用NSDate的addTimeInterval实例方法:
NSDate *newDate = [oldDate addTimeInterval:3600];
编辑:正如 Chip Coons 正确指出的那样,此方法已被弃用。请改用其他方法之一。
【讨论】:
【参考方案4】:对于那些寻找 Swift 3.x 版本的人:
let newDate = Date.init(timeInterval: 2600, since: oldDate)
【讨论】:
【参考方案5】:您可以使用 NSDate 的较新的 dateByAddingTimeInterval 实例方法,而不是使用已弃用的 addTimeInterval 方法。
NSDate *newDate = [oldDate dateByAddingTimeInterval:2500];
【讨论】:
以上是关于如何向 NSDate 添加时间间隔?的主要内容,如果未能解决你的问题,请参考以下文章