在可可,我将如何添加时间,例如:添加经过时间的可可
1:30(1小时30分钟) 1:25(一小时和25分钟) 2:15(二小时15分钟)
= 5:10
,但是当我得到更大然后在24小时内,我不希望它去,一天X小时和y分钟,我希望它继续添加小时例如25,26,27 ... 100小时等等。Cocoa中是否已经实现了一个方法?
感谢
在可可,我将如何添加时间,例如:添加经过时间的可可
1:30(1小时30分钟) 1:25(一小时和25分钟) 2:15(二小时15分钟)
= 5:10
,但是当我得到更大然后在24小时内,我不希望它去,一天X小时和y分钟,我希望它继续添加小时例如25,26,27 ... 100小时等等。Cocoa中是否已经实现了一个方法?
感谢
将它们自己添加到date components对象中。
将两秒钟的组件加在一起时,除以60以确定携带到分钟组件的数量,并使用%
运算符确定秒组件的新值。 (例如,73秒是73/60
= 1分钟,而73 % 60
= 13秒。)同样要加分钟并持续几小时。然后,在添加小时数时,只需添加小时数,并且不要执行任何divmod魔法,如果您不想进入天数组件。
只为其他人的利益使用彼得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;
}
'%'操作符不适用于浮点类型。对于整型类型,你绝对应该使用'%'。 (我忘记了NSDateComponents使用整数来表示组件值,你可以跳过'floor'函数;当你用浮点值做这个时,你只需要它。)另外,如果你不是针对Tiger,你应该对这些变量使用'NSInteger',而不是'int'。这种情况不太可能发生,但尽快养成这种习惯是件好事。 – 2010-01-08 22:59:51
如果我只用这一次将获得总共的目的,会是更好地使用C Sturct像下面然后NSDateComponents?
typedef struct {
int hours;
int minutes;
} time;
由于这不能回答问题,因此应该将其作为单独问题提出。 – 2010-10-29 15:42:29
这增加了日期,而不是时间。 – 2010-01-02 03:02:00