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?
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?
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
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
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. –
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);
}
Es funktioniert. Vielen Dank – chandrika
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)
}
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)
}
}
Müssen Sie auch die Sekunden entfernen? – chowey
Wie hast du es versucht? – Wain
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