【问题标题】:How to add a time interval to an NSDate?如何向 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 函数吗

【问题讨论】:

    标签: objective-c cocoa cocoa-touch nsdate date-arithmetic


    【解决方案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];
        

        【讨论】:

          猜你喜欢
          • 2017-04-23
          • 1970-01-01
          • 1970-01-01
          • 2012-07-02
          • 2019-07-01
          • 1970-01-01
          • 1970-01-01
          • 1970-01-01
          • 1970-01-01
          相关资源
          最近更新 更多