2009-11-24 16 views
6

私は既にNSDateで試してみましたが、運はありません。 例14:10と18:30の違いが必要です。2回の時間を取得する

時間と分。

私はあなたが私には複雑:)

+0

どのように違いを提示しますか? NSString、NSNumber、int、浮動小数点数、別のNSDate? – Eimantas

+0

をNSStringとして返します。 – user134282

答えて

12

NSDateクラスは、トリックを行う方法のtimeIntervalSinceDateを持っていることをすべきではないのに役立ちます願っています。

NSTimeInterval secondsBetween = [firstDate timeIntervalSinceDate:secondDate]; 

NSTimeIntervalは、2回の間の秒数を表す倍数です。

+0

それから、秒を時間と分に変えるためにあなた自身の計算をしなければなりません。その後、それらの数字を文字列に変換する必要があります。それは些細なことだが、それは多くなる。私はこれを行うユーティリティクラスを作成し、それを便利にすることをお勧めします。 – TechZen

+0

大丈夫です!今私は秒を持っているので、私は3600を分けることになります。そして、私は1546521531を得ます。 私に何かヒントを教えてもらえますか? – user134282

17

ここに私の迅速なソリューションです:

NSDateFormatter *df = [[[NSDateFormatter alloc] init] autorelease]; 
[df setDateFormat:@"HH:mm"]; 
NSDate *date1 = [df dateFromString:@"14:10"]; 
NSDate *date2 = [df dateFromString:@"18:09"]; 
NSTimeInterval interval = [date2 timeIntervalSinceDate:date1]; 
int hours = (int)interval/3600;    // integer division to get the hours part 
int minutes = (interval - (hours*3600))/60; // interval minus hours part (in seconds) divided by 60 yields minutes 
NSString *timeDiff = [NSString stringWithFormat:@"%d:%02d", hours, minutes]; 
+0

ありがとう!コンパイラが私にinitWithDateFormatが存在しないというエラーを返します... – user134282

+1

申し訳ありませんが、私はMac OS SDKでそれを書いています。 iPhone SDK用に修正されました。 – amrox

+0

すてきなコード:)ありがとう。 – user134282

29

は、手でこれを計算NSCalendarを見てする必要はありません。あなたは今NSDateComponentsとして時間と分を持っていると[components hour][components minute]などのNSIntegersとしてそれらにアクセスすることができ

NSCalendar *gregorianCalendar = [[NSCalendar alloc] initWithCalendarIdentifier:NSGregorianCalendar]; 
NSUInteger unitFlags = NSHourCalendarUnit | NSMinuteCalendarUnit; 
NSDateComponents *components = [gregorianCalendar components:unitFlags 
                fromDate:firstDate 
                 toDate:otherDate 
                options:0]; 
[gregorianCalendar release]; 

:あなたは、2つの日付の間の時間と分を取得したい場合は、このようなものを使用します。これはまた、何日もの間、閏年と他の楽しいもののために働くでしょう。

6
NSString *duration = [self calculateDuration:oldTime secondDate:currentTime]; 

- (NSString *)calculateDuration:(NSDate *)oldTime secondDate:(NSDate *)currentTime 
{ 
    NSDate *date1 = oldTime; 
    NSDate *date2 = currentTime; 

    NSTimeInterval secondsBetween = [date2 timeIntervalSinceDate:date1]; 

    int hh = secondsBetween/(60*60); 
    double rem = fmod(secondsBetween, (60*60)); 
    int mm = rem/60; 
    rem = fmod(rem, 60); 
    int ss = rem; 

    NSString *str = [NSString stringWithFormat:@"%02d:%02d:%02d",hh,mm,ss]; 

    return str; 
} 
+0

これは私のために働く..ありがとうございました。 。 。 – iHart

関連する問題