Swift: 特定时间的下一次实例最快日期

Swift: Next instance of certain time on soonest date

我正在使用 Swift 2.1 构建一个可设置重复提醒的应用程序。这主要由两部分组成:

  1. 用户可以select提醒必须开始的时间(例如09:00)
  2. 用户可以选择每隔 X 小时重复一次(例如,如果是六个小时,则提醒将设置为 09:00、15:00、21:00、03:00)

我正在使用 CVCalendarKit 来操作某些日期单位,所以第 2 部分(每次增加 X 小时)不是我遇到的问题。

我想弄清楚的是,是否有一种简单的方法可以用特定时间的最快实例创建 NSDate 的实例。

所以,假设今天是 2016 年 2 月 13 日,

非常感谢。

您可以使用NSCalendar.nextDateAfterDate()

let calendar = NSCalendar.currentCalendar()

let now = NSDate()

let nextTime = calendar.nextDateAfterDate(now,
                          matchingHour: 9,
                                minute: 0,
                                second: 0,
                               options: NSCalendarOptions.MatchNextTime)

如果您没有使用开源 Swift 基础库,这仅适用于 iOS 8+ 或 OS X 10.9+

注意夏令时的变化。

很快就会有一天少了一个小时。在那种情况下,您(或您的用户)必须做出两个决定: 1. 如果您感兴趣的日期不存在怎么办? (例如,英国一年中会有一天不存在“第二天凌晨 2:30”)。 2. "every six hours" 是什么意思?在一年中的某一天,“21:00 后 6 小时”是第二天的“04:00”。