2016-04-11 62 views
0

我有一些事件,我需要計算NSDates。 例如,我試圖在上午8:00得到下一個星期一。如何獲得特定的下一天和時間的NSDate

所以我嘗試了一些東西,但沒有任何工程

1.

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

我得到:

2016年4月12日05:00:00 +0000 - (時間不同的是我當地的時間格林威治標準時間-3)

這就是星期二在8.

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年4月11日05:00:00 +0000

今天在那,而不是下一個8

有什麼建議嗎? 謝謝

+0

我發現了一個類似的帖子,可以幫助:http://stackoverflow.com/questions/18148224/get-next-monday-date-in-ios – Pankaj

+0

對於第一種方法,你需要檢查一下是否'NSCalendar.currentCalendar()'的第一天是星期一或星期日 – zcui93

回答

4

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) 
+0

謝謝,工程很棒... – ilan

相關問題