2010-01-02 4 views
0

в какао, как бы я добавить раз, например:Добавление истекшего времени в какао

1:30 (один час и 30 минут) 1:25 (один час и 25 минут) 2:15 (два час и 15 минут)

= 5:10

, но когда я получаю больше чем 24 часов, я не хочу идти, один день х часов и минут у, я хочу, чтобы продолжить добавление часов например 25, 26, 27 ... 100 часов и т. Д. Есть ли уже реализованный метод в какао?

Благодаря

ответ

2

Добавьте их сами в объект date components.

При добавлении двух секундных компонентов разделите на 60, чтобы определить номер для переноса в компонент минут, и используйте оператор % для определения нового значения компонента секунд. (Например, 73 секунды: 73/60 = 1 минута и 73 % 60 = 13 секунд.) Аналогично добавляйте минуты и переносите часы. Затем, добавляя часы, просто добавляйте их и не делайте никакой магии divmod, если вы не хотите переносить компонент дней.

0

Просто для других людей интерес с использованием Peter Hoseys дает мне совет простой инструмент командной строки, который решает эту проблему: (если у кого-нибудь есть советы по улучшению моего решения, это будет очень полезно). Также есть ли преимущество использования remainder function по сравнению с %?

#import <Foundation/Foundation.h> 

NSDateComponents *totalTime; 

void timeByAddingComponents(NSDateComponents *firstTime, NSDateComponents *secondTime) { 
    int addMin = [firstTime minute] + [secondTime minute]; 
    int addHour = floor(addMin/60); 
    addMin = addMin % 60; 
    addHour = addHour + [firstTime hour] + [secondTime hour]; 
    [totalTime setMinute:addMin]; 
    [totalTime setHour:addHour]; 
} 

int main (int argc, const char * argv[]) { 
    NSAutoreleasePool * pool = [[NSAutoreleasePool alloc] init]; 

    totalTime = [[NSDateComponents alloc] init]; 
    [totalTime setHour:0]; 
    [totalTime setMinute:0]; 

    NSDateComponents *addTime = [[NSDateComponents alloc] init]; 

    while (TRUE) { 
     int x, y; 
     printf("Please Enter Number of Hours: "); 
     scanf("%d", &x); 
     printf("Please Enter Number of Minutes: "); 
     scanf("%d", &y); 
     if (x == 0 && y == 0) 
      break; 
     NSLog(@"Add %i:%i to %i:%i", x,y, [totalTime hour], [totalTime minute]); 
     [addTime setHour:x]; 
     [addTime setMinute:y]; 
     timeByAddingComponents(totalTime, addTime); 
     NSString *time = [NSString stringWithFormat:@"%.2d:%.2d",[totalTime hour],[totalTime minute]]; 
     NSLog(@"Total time now: %@", time); 
    } 

    [totalTime release]; 
    [addTime release]; 
    [pool drain]; 
    return 0; 
} 
+0

Оператор '%' не работает с типами с плавающей запятой. Для интегральных типов вы абсолютно должны использовать '%'. (Я забыл, что NSDateComponents использует целые числа для значений компонента. Вы можете пропустить функцию «floor», вам понадобится только это, когда вы делаете это с помощью значений с плавающей запятой.) Кроме того, если вы не нацеливаете Tiger, вы должны используйте 'NSInteger' для этих переменных, а не' int'. В этом случае это вряд ли когда-либо будет иметь значение, но хорошо как можно скорее войти в привычку. –

0

Если я только использую это время для целей добавления, чтобы получить в общей сложности, было бы лучше использовать C Sturct, как показано ниже, то NSDateComponents?

typedef struct { 
    int hours; 
    int minutes; 
} time; 
+1

Поскольку это не отвечает на вопрос, вы должны задать его как отдельный вопрос. –

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

  • Нет связанных вопросов^_^