在可可,我將如何添加時間,例如:添加經過時間的可可
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