2009-11-24 25 views
6

我已經試過用NSDate但沒有運氣。 我想要例如14:10和18:30之間的差異。得到一天兩次之間的時間

小時和分鐘。

我希望你能幫助我不應該是複雜的:)

+0

您想如何呈現差異? NSString,NSNumber,int,float,另一個NSDate? – Eimantas

+0

作爲NSString。 – user134282

回答

12

的NSDate的類有做的伎倆的方法timeIntervalSinceDate。

NSTimeInterval secondsBetween = [firstDate timeIntervalSinceDate:secondDate]; 

NSTimeInterval是一個雙精度值,表示兩次之間的秒數。

+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

謝謝! mhh編譯器給我一個錯誤,說明initWithDateFormat ...不存在... – user134282

+1

對不起,我用Mac OS SDK編寫了這個錯誤。已針對iPhone SDK進行了更正。 – amrox

+0

偉大的代碼:)非常感謝。 – user134282

29

有沒有必要用手工計算這個,看看NSCalendar。如果你想獲得的小時和分鐘兩個日期之間,使用這樣的:

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

您現在有小時和分鐘爲NSDateComponents並且可以訪問它們作爲NSIntegers[components hour][components minute]。這也將工作幾天,閏年和其他有趣的東西幾個小時。

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