【问题标题】:Swift: Next instance of certain time on soonest dateSwift:最快日期某个时间的下一个实例
【发布时间】:2016-02-13 13:33:09
【问题描述】:
我正在使用 Swift 2.1 构建一个设置重复提醒的应用程序。这主要包括两部分:
- 用户可以选择提醒必须开始的时间(例如 09:00)
- 用户可以选择让它每 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”。