У меня есть данные в форматеОкругление NSDate до ближайшего часа в прошивкой
время: 13:52, 10:30, 11:48
и т.д.
Я хотел бы округлить до ближайший час.
нравится 13:52 -> 14:00, 10:30 -> 11:00 и 11:48 -> 12:00.
Как я могу это сделать с NSDate?
У меня есть данные в форматеОкругление NSDate до ближайшего часа в прошивкой
время: 13:52, 10:30, 11:48
и т.д.
Я хотел бы округлить до ближайший час.
нравится 13:52 -> 14:00, 10:30 -> 11:00 и 11:48 -> 12:00.
Как я могу это сделать с NSDate?
Используйте этот метод
- (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
Привет, @ Lithu Tv, я настраиваю часовой пояс на UTC, если я использую ваш код. Если системное время (индийское время) - 6:10 вечера, я получаю 7:30 вечера. Точно так же я меняю часовой пояс на США устройство под настройками, а затем попробуйте, и если время 8:20 утра, я получаю 9.00. Я не понимаю, почему? – Ranjit
Это больше функция потолка. Если у вас 10:15, он не будет округлен до 10. Вместо этого он изменится на 11:15. –
Используйте код ниже. Это должно помочь вам.
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);
}
Его работа. Большое спасибо – 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)
}
Вот 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)
}
}
Вам также нужно удалить секунды? – chowey
Как вы это пробовали? – Wain
1. Разделите NSDate на компоненты 2. Добавьте if-else и проверьте, больше ли минут, чем 30 3. Завершите свои минуты и увеличьте часы на один или ничего не делайте. Это оно. Простая математика :-) – Oleg