2013-06-10 3 views
5

У меня есть данные в форматеОкругление NSDate до ближайшего часа в прошивкой

время: 13:52, 10:30, 11:48

и т.д.

Я хотел бы округлить до ближайший час.

нравится 13:52 -> 14:00, 10:30 -> 11:00 и 11:48 -> 12:00.

Как я могу это сделать с NSDate?

+1

Как вы это пробовали? – Wain

+1

1. Разделите NSDate на компоненты 2. Добавьте if-else и проверьте, больше ли минут, чем 30 3. Завершите свои минуты и увеличьте часы на один или ничего не делайте. Это оно. Простая математика :-) – Oleg

ответ

7

Используйте этот метод

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

Это даст вам дату в течение следующего часа для inDate

+0

Привет, @ Lithu Tv, я настраиваю часовой пояс на UTC, если я использую ваш код. Если системное время (индийское время) - 6:10 вечера, я получаю 7:30 вечера. Точно так же я меняю часовой пояс на США устройство под настройками, а затем попробуйте, и если время 8:20 утра, я получаю 9.00. Я не понимаю, почему? – Ranjit

+1

Это больше функция потолка. Если у вас 10:15, он не будет округлен до 10. Вместо этого он изменится на 11:15. –

0

Используйте код ниже. Это должно помочь вам.

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

Его работа. Большое спасибо – 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

Вот Swift 3.0 реализация, которая получает в ближайший час, используя Date расширение:

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

Вам также нужно удалить секунды? – chowey

Смежные вопросы