在Cocoa中添加已用时间

时间:2010-01-02 00:39:14

标签: cocoa time

在Cocoa中,我如何添加时间,例如:

1:30(1小时30分钟) 1:25(1小时25分钟) 2:15(2小时15分钟)

= 5:10

但是当我超过24小时后,我不想让它去,一天x小时和几分钟,我希望它继续增加时间,例如25,26,27 ...... 100小时等.Cocoa中已经有一个实现的方法吗?

由于

4 个答案:

答案 0 :(得分:2)

答案 1 :(得分:2)

将自己添加到date components对象中。

当您将两秒组件添加到一起时,除以60以确定要携带到分钟组件的数量,并使用%运算符确定秒组件的新值。 (例如,73秒为73 / 60 = 1分钟且73 % 60 = 13秒。)同样需要添加分钟并持续数小时。然后,当添加小时时,只需添加它们,如果你不想携带到日期组件,就不要做任何divmod魔法。

答案 2 :(得分: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;
}

答案 3 :(得分:0)

如果我只是为了增加总数而使用这个时间,那么使用下面的C Sturct然后使用NSDateComponents会更好吗?

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