2013-06-10 8 views
5

Ich habe Daten im FormatAbrunden von NSDate zur nächsten Stunde in iOS

Zeit: 13.52, 10.30, 11.48

etc

Ich mag die abzurunden nächste Stunde.

gerne für 13:52 -> 14:00, 10:30 -> 11:00 und 11:48 -> 12:00.

Wie kann ich das mit NSDate machen?

+1

Wie hast du es versucht? – Wain

+1

1. Teilen Sie Ihr NSDate in Komponenten 2. Fügen Sie if-else hinzu und prüfen Sie, ob die Minuten größer als 30 sind. 3. Zerlegen Sie Ihre Minuten und erhöhen Sie Ihre Stunden um eins oder tun Sie nichts. Das ist es. Einfache Mathematik :-) – Oleg

Antwort

7

Verwenden Sie diese Methode

- (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]; 
} 

Dies wird Ihnen das Datum in der nächsten Stunde für die Indate

+0

Hey Hallo @Lithu Tv, ich setze Zeitzone zu UTC, wenn ich Ihren Code verwende, Wenn die Systemzeit (indische Zeit) ist 6.10 Uhr, bekomme ich 19.30 Uhr, Ebenso ändere ich die Zeitzone in US auf Gerät unter Einstellungen und dann versuchen und wenn die Zeit 8.20 Uhr ist, bekomme ich 9.00 Uhr. Ich verstehe nicht warum? – Ranjit

+1

Dies ist eher eine Ceil-Funktion. Wenn Sie 10:15 haben, wird es nicht auf 10 gerundet. Stattdessen wird es zu 11:15 geändert. –

0

Verwenden Sie den unten stehenden Code. Es muss dir helfen.

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

Es funktioniert. Vielen Dank – 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

Hier ist ein Swift 3.0-Implementierung, die die nächste Stunde bekommt, eine Date mit Erweiterung:

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

Müssen Sie auch die Sekunden entfernen? – chowey