2013-03-07 71 views

回答

14

下面是如何WWDC 2011 session 117 - Performing Calendar Calculations教導我:

NSDate* now = [NSDate date] ; 

NSDateComponents* tomorrowComponents = [NSDateComponents new] ; 
tomorrowComponents.day = 1 ; 
NSCalendar* calendar = [NSCalendar currentCalendar] ; 
NSDate* tomorrow = [calendar dateByAddingComponents:tomorrowComponents toDate:now options:0] ; 

NSDateComponents* tomorrowAt8AMComponents = [calendar components:(NSEraCalendarUnit|NSYearCalendarUnit|NSMonthCalendarUnit|NSDayCalendarUnit) fromDate:tomorrow] ; 
tomorrowAt8AMComponents.hour = 8 ; 
NSDate* tomorrowAt8AM = [calendar dateFromComponents:tomorrowAt8AMComponents] ; 

太糟糕了iOS不具備[NSDate dateWithNaturalLanguageString:@"tomorrow at 8:00 am"]。謝謝,rmaddy,指出了。

+2

基於標籤,這個問題似乎是爲iOS。 'dateWithNaturalLanguageString:'方法僅適用於OSX,不適用於iOS。 – rmaddy 2013-03-07 03:02:53

+0

好吧,現在它增加了8個小時我認爲,但在上午8點,它不會增加一天,它會回到今天。雖然在明天只有一個是明天...這是我的控制檯日誌的所有三個日期http://cl.ly/NPH5 – 2013-03-07 05:09:09

+0

而不是記錄NSDate,你可以[使用NSDateFormatter來創建一個NSString]( http://i.stack.imgur.com/EXWgO.png)並記錄下來? – 2013-03-07 12:19:34

1

雨燕2.1

let now = NSDate() 
    let tomorrowComponents = NSDateComponents() 
    tomorrowComponents.day = 1 

    let calendar = NSCalendar.currentCalendar() 
    if let tomorrow = calendar.dateByAddingComponents(tomorrowComponents, toDate: now, options: NSCalendarOptions.MatchFirst) { 

     let flags: NSCalendarUnit = [.Era, .Year, .Month, .Day] 
     let tomorrowValidTime: NSDateComponents = calendar.components(flags, fromDate: tomorrow) 
     tomorrowValidTime.hour = 7 

     if let tomorrowMorning = calendar.dateFromComponents(tomorrowValidTime) { 
      return tomorrowMorning 
     } 

    } 
0

斯威夫特3+

private func tomorrowMorning() -> Date? { 
    let now = Date() 
    var tomorrowComponents = DateComponents() 
    tomorrowComponents.day = 1 
    let calendar = Calendar.current 
    if let tomorrow = calendar.date(byAdding: tomorrowComponents, to: now) { 
     let components: Set<Calendar.Component> = [.era, .year, .month, .day] 
     var tomorrowValidTime = calendar.dateComponents(components, from: tomorrow) 
     tomorrowValidTime.hour = 7 
     if let tomorrowMorning = calendar.date(from: tomorrowValidTime) { 
      return tomorrowMorning 
     } 

    } 
    return nil 
} 
相關問題