ios - 如何获取特定的第二天和时间的 NSDate

标签 ios swift nsdate

我有一些事件需要计算 NSDate。 例如,我试图在下周一上午 8:00 到达。 所以我尝试了一些东西但没有任何效果:

1.

let nextMonday = NSCalendar.currentCalendar().dateBySettingUnit(NSCalendarUnit.Weekday, value: 2, ofDate: startDate, options: NSCalendarOptions.MatchNextTime)
let nextMondayEight = NSCalendar.currentCalendar().dateBySettingUnit(NSCalendarUnit.Hour, value: 8, ofDate: nextMonday!, options: NSCalendarOptions.MatchNextTime)

我得到:

2016-04-12 05:00:00 +0000

那是星期二 8:00(时差是我本地时间 GMT -3)。

2.

let unitFlags: NSCalendarUnit = [.Day, .Month, .Year]
let comp = NSCalendar.currentCalendar().components(unitFlags, fromDate: NSDate())
comp.timeZone = NSTimeZone.localTimeZone()
comp.weekday = 1
comp.hour = 8
comp.minute = 0
comp.second = 0
let compDate = NSCalendar.currentCalendar().dateFromComponents(comp)

print("time: \(compDate!)")

我得到:

2016-04-11 05:00:00 +0000

那是今天 8:00,而不是下周一 8:00。


有什么建议吗? 谢谢

最佳答案

NSCalendar 有一个方法 nextDateAfterDate:matchingComponents:options 用于这种日期数学运算。

let calendar = NSCalendar.currentCalendar()
let components = NSDateComponents()
components.hour = 8 // 8:00
components.weekday = 2 // Monday in Gregorian Calendar

let nextMondayEightOClock = calendar.nextDateAfterDate(NSDate(), matchingComponents: components, options: .MatchStrictly)

关于ios - 如何获取特定的第二天和时间的 NSDate,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/36544325/

相关文章:

ios - 检查 UITextField 是否为空的优雅方法

ios - 在 View Controller 中获取已关闭 PopupDialog 的通知

ios - 如何使用 SwiftUI 在另一个 View 中创建 View ?

objective-c - 在 NSUserDefaults 中存储日期抛出异常

iphone - 将 NSString 转换为 NSDate,日期和时间作为不同的字符串接收

swift - 在 Swift 2 中实现时间框架的方法

ios - 深层链接 URL 方案不会调用 iOS App Delegate 中的任何函数

ios - 如何在 swift 中为 Post 请求创建 JSON Body

objective-c - iOS Objective-C 访问来自不同类的 ivars

ios - 如何以编程方式将用户名和密码存储在自动填充中?