2013-06-10 15 views
5

ho i dati nel formatoArrotondamento di NSDate in ora più vicino in iOS

tempo: 13:52, 10:30, 11:48

ecc

Vorrei arrotondare al ora più vicina

come per 13:52 -> 14:00, 10:30 -> 11:00 e 11:48 -> 12:00.

Come posso farlo con NSDate?

+1

Come hai provato a farlo? – Wain

+1

1. Dividi l'NSDate in componenti 2. Aggiungi if-else e controlla se i minuti sono superiori a 30 3. Azzera i minuti e aumenta le ore di uno o non fare nulla. Questo è tutto. Semplice matematica :-) – Oleg

risposta

7

Utilizzare questo metodo

- (NSDate*) nextHourDate:(NSDate*)inDate{ 
    NSCalendar *calendar = [NSCalendar currentCalendar]; 
    NSDateComponents *comps = [calendar components: NSEraCalendarUnit|NSYearCalendarUnit| NSMonthCalendarUnit|NSDayCalendarUnit|NSHourCalendarUnit fromDate: inDate]; 
    [comps setHour: [comps hour]+1]; //NSDateComponents handles rolling over between days, months, years, etc 
    return [calendar dateFromComponents:comps]; 
} 

Questo vi darà la data di prossima ora per l'Indate

+0

Hey Ciao @Lithu Tv, sto impostando il fuso orario su UTC, se uso il tuo codice, Se l'ora del sistema (Indian Time) è alle 18.10, sto ricevendo le 19.30 pm, Analogamente cambio il fuso orario negli Stati Uniti su dispositivo sotto le impostazioni e quindi provare e se il tempo è 8.20 del mattino ottengo 9.00. Non capisco perché? – Ranjit

+1

Questa è più di una funzione ceil. Se hai 10:15, non sarà arrotondato a 10. Invece cambierà in 11:15. –

0

Utilizzare il codice riportato di seguito. Deve aiutare per te.

NSString *[email protected]"17:15"; 
    NSArray *strings = [dateString componentsSeparatedByString:@":"]; 

int firstPart=[[NSString stringWithFormat:@"%@",strings[0]] intValue]; 
int lastPart=[[NSString stringWithFormat:@"%@",strings[1]] intValue]; 

NSLog(@"LAST:%d",firstPart); 

if (lastPart>0) { 

    int output=firstPart+1; 



    NSString *finalOutput=[NSString stringWithFormat:@"%d:00",output]; 

    NSLog(@"OUTPUT:%@",finalOutput); 
} 
else 
{ 
    NSLog(@"OUTPUT:%@",dateString); 
} 
+0

È funzionante. Grazie mille – chandrika

4
func nextHourDate() -> NSDate? { 
    let calendar = NSCalendar.currentCalendar() 
    let date = NSDate() 
    var minuteComponent = calendar.components(NSCalendarUnit.MinuteCalendarUnit, fromDate: date) 
    let components = NSDateComponents() 
    components.minute = 60 - minuteComponent.minute 
    return calendar.dateByAddingComponents(components, toDate: date, options: nil) 
} 
4

Ecco un'implementazione Swift 3.0 che ottiene l'ora più vicino, utilizzando un Date estensione:

extension Date { 
    func nearestHour() -> Date? { 
     var components = NSCalendar.current.dateComponents([.minute], from: self) 
     let minute = components.minute ?? 0 
     components.minute = minute >= 30 ? 60 - minute : -minute 
     return Calendar.current.date(byAdding: components, to: self) 
    } 
} 
+0

Hai anche bisogno di rimuovere i secondi? – chowey