Во-первых, возможно, ваш метод с форматными строками слишком сложен.Не забывайте, что вывод NSLog
также необходимо отформатировать, иначе вы получите другой языковой стандарт и часовой пояс, поэтому эти значения ненадежны для проверки правильности вашей логики.
ПростоеРешение состоит в том, чтобы использовать тот факт, что NSTimeInterval
в секундах.Таким образом:
NSDate *midnight; // the date you want, at 0:00 am
NSDate *newDate = [midnight dateByAddingTimeInterval:minutes*60];
РЕДАКТИРОВАТЬ:
Кроме того, я проверил ваш код - вы можете исправить его, изменив формат строки.Проблема была в том, что форматировщик даты перепутал с минутой, имеющей 1 или 2 цифры.
NSDateFormatter *dateFormatter = [[NSDateFormatter alloc]init];
for (NSInteger minutes = 495; minutes < 1000; minutes +=60) {
[dateFormatter setDateFormat:@"hh:mm"];
NSLog(@"Minutes %2i",minutes);
NSString *time = [NSString stringWithFormat:@"%2i:%2i", (minutes / 60), (minutes % 60)];
NSLog(@"time: %@",time);
NSDate *formatTime = [dateFormatter dateFromString:time];
NSLog(@"formatTime %@",formatTime);
dateFormatter.locale = [[NSLocale alloc] initWithLocaleIdentifier:@"en-US"];
[dateFormatter setDateFormat:@"HH:mm a"];
NSString *newTime = [dateFormatter stringFromDate:formatTime];
NSLog(@"NewTime: %@",newTime);
}
dateFormatter = nil;
РЕДАКТИРОВАТЬ 2:
Расширение на код выше, как требуется:
NSDateFormatter *dateFormatter = [[NSDateFormatter alloc]init];
[dateFormatter setDateFormat:@"hh:mm a"];
NSDate *midnight = [NSDate dateWithTimeIntervalSince1970:0];
for (NSInteger minutes = 495; minutes < 1000; minutes +=60) {
NSDate *newDate = [midnight dateByAddingTimeInterval:minutes*60];
NSLog(@"newDate: %@", [dateFormatter stringFromDate:newDate]);
}
dateFormatter = nil;