Существует университетский курс в Индиане и Университетах Пердью на C-программировании. Курс имеет видео лекции, которые можно найти в здесь .
, Если Вы также интересуетесь рассмотрением C++, существует набор лекций в веб-Проект Архива Лекции, названный "C++ для Физиков Частицы". Вы находите те лекции здесь . Лекции сохранены Paul Kunz из Стэнфордского университета.
Для большего количества лекций C++, можно также проверить , эти лекции от Повторно подключают Сети.
Краткое описание
Еще один подход к завершению ответа JBRWilkinson, но с добавлением кода. Он также может предложить решение комментария Алекса Рейнольдса.
Использовать метод NSCalendar:
(NSDateComponents *) components: (NSUInteger) unitFlags fromDate: (NSDate *) startDate toDate: (NSDate *) Параметры resultDate: (NSUInteger) opts
"Возвращает, как объект NSDateComponents используя указанные компоненты, разница между двумя предоставленными датами ". (Из документации API).
Создайте 2 NSDate, разница между которыми состоит в NSTimeInterval, который вы хотите разбить. (Если ваш NSTimeInterval получен из сравнения 2 NSDate, вам не нужно делать этот шаг, и вам даже не нужен NSTimeInterval, просто примените даты к методу NSCalendar).
Получите цитаты из NSDateComponents
Образец кода
// The time interval
NSTimeInterval theTimeInterval = ...;
// Get the system calendar
NSCalendar *sysCalendar = [NSCalendar currentCalendar];
// Create the NSDates
NSDate *date1 = [[NSDate alloc] init];
NSDate *date2 = [[NSDate alloc] initWithTimeInterval:theTimeInterval sinceDate:date1];
// Get conversion to months, days, hours, minutes
NSCalendarUnit unitFlags = NSHourCalendarUnit | NSMinuteCalendarUnit | NSDayCalendarUnit | NSMonthCalendarUnit;
NSDateComponents *breakdownInfo = [sysCalendar components:unitFlags fromDate:date1 toDate:date2 options:0];
NSLog(@"Break down: %i min : %i hours : %i days : %i months", [breakdownInfo minute], [breakdownInfo hour], [breakdownInfo day], [breakdownInfo month]);
Преобразуйте ваш интервал в NSDate
, используя + dateWithIntervalSince1970
, получите компоненты даты из этого, используя NSCalendar
-componentsFromDate
.
NSDate *date = [NSDate dateWithTimeIntervalSince1970:timeInterval];
// format: YYYY-MM-DD HH:MM:SS ±HHMM
NSString *dateStr = [date description];
NSRange range;
// year
range.location = 0;
range.length = 4;
NSString *yearStr = [dateStr substringWithRange:range];
int year = [yearStr intValue] - 1970;
// month
range.location = 5;
range.length = 2;
NSString *monthStr = [dateStr substringWithRange:range];
int month = [monthStr intValue];
// day, etc.
...
Вот еще одна возможность, несколько чище:
NSDate *date = [NSDate dateWithTimeIntervalSince1970:timeInterval];
NSString *dateStr = [date description];
const char *dateStrPtr = [dateStr UTF8String];
// format: YYYY-MM-DD HH:MM:SS ±HHMM
int year, month, day, hour, minutes, seconds;
sscanf(dateStrPtr, "%d-%d-%d %d:%d:%d", &year, &month, &day, &hour, &minutes, &seconds);
year -= 1970;
Это работает для меня:
float *lenghInSeconds = 2345.234513;
NSDate *date = [NSDate dateWithTimeIntervalSinceReferenceDate:lenghInSeconds];
NSDateFormatter *formatter = [[NSDateFormatter alloc] init];
[formatter setTimeZone:[NSTimeZone timeZoneForSecondsFromGMT:0.0]];
[formatter setDateFormat:@"HH:mm:ss"];
NSLog(@"%@", [formatter stringFromDate:date]);
[formatter release];
Основное отличие здесь в том, что вам нужно настроить часовой пояс.