Swift:最快日期的某个时间的下一个实例

时间:2016-02-13 13:33:10

标签: swift date time nsdate

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

  1. 用户可以选择提醒必须开始的时间(例如09:00)
  2. 用户可以选择每X小时重复一次(例如,如果它是六小时,则提醒将设置为09:00,15:00,21:00,03:00)
  3. 我使用CVCalendarKit来操纵某些日期单位,所以第2部分(每次增加X小时)并不是我遇到的麻烦。

    我想弄清楚的是,如果有一个简单的方法来创建NSDate的实例并使用最快的某个时间实例。

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

    • 如果是8:59,则NSDate创建的应为2016-02-13 09:00:00
    • 如果是9:01,则​​NSDate创建的应为2016-02-14 09:00:00

    非常感谢提前。

2 个答案:

答案 0 :(得分:3)

您可以使用NSCalendar.nextDateAfterDate()

let calendar = NSCalendar.currentCalendar()

let now = NSDate()

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

如果您不使用开源Swift Foundation库,则仅适用于iOS 8+或OS X 10.9 +

答案 1 :(得分:0)

注意夏令时的变化。

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