【问题标题】:Swift: Next instance of certain time on soonest dateSwift:最快日期某个时间的下一个实例
【发布时间】:2016-02-13 13:33:09
【问题描述】:

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

  1. 用户可以选择提醒必须开始的时间(例如 09:00)
  2. 用户可以选择让它每 X 小时重复一次(例如,如果是 6 小时,那么提醒将设置在 09:00、15:00、21:00、03:00)

我正在使用 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

非常感谢。

【问题讨论】:

    标签: swift date time nsdate


    【解决方案1】:

    您可以使用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+

    【讨论】:

      【解决方案2】:

      注意夏令时的变化。

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

      【讨论】:

      • 这可能应该是一条评论。这里没有真正的答案。
      • 感谢您的提醒。 :) 我一定会考虑到这一点。
      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2014-01-13
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多