如何向 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 添加时间间隔?的主要内容,如果未能解决你的问题,请参考以下文章

如何在联接表中向订阅日期添加时间间隔

如何使 NSDate 与关联对象一起工作?

如何计算设备断电的剩余时间

如何为 NSDate 添加 1 天?

如何在 DBVisualizer 中用 SQL 表示从现在开始向后的 2 小时间隔

通过 NSDate 对元素进行排序并添加到 UITableView