2011-08-14 22 views
0

我正在創建一個倒計時器,我需要打印出剩下的時間(小時:分鐘:秒)直到特定日期。我發現如何獲得Now和目標日期之間的時間間隔,但我不知道如何將時間間隔格式化爲字符串。 NSDateFormater在NSTimeInterval上工作嗎?Objective-c格式化時間直到某個日期

回答

3

你會先比較兩個NSDate的對象檢索兩者之間在幾秒鐘的差別,你應該使用NSDate的方法是

- (NSTimeInterval)timeIntervalSinceDate:(NSDate *)anotherDate 

然後,你可以簡單地寫一個函數來解析秒到小時/分鐘/秒,例如,你可以使用這個(未經測試):

-(NSDictionary*)createTimemapForSeconds:(int)seconds{ 
    int hours = floor(seconds/(60 * 60)); 

    float minute_divisor = seconds % (60 * 60); 
    int minutes = floor(minute_divisor/60); 

    float seconds_divisor = seconds % 60; 
    seconds = ceil(seconds_divisor); 

    NSDictionary * timeMap = [NSDictionary dictionaryWithObjects:[NSArray arrayWithObjects:[NSNumber numberWithInt:hours], [NSNumber numberWithInt:minutes], [NSNumber numberWithInt:seconds], nil] forKeys:[NSArray arrayWithObjects:@"h", @"m", @"s", nil]]; 

    return timeMap; 
} 
5

NSTimeInterval以秒爲單位,使用分而其餘打破它與格式(未測試的代碼):

NSString *timeIntervalToString(NSTimeInterval interval) 
{ 
    long work = (long)interval; // convert to long, NSTimeInterval is *some* numeric type 

    long seconds = work % 60; // remainder is seconds 
    work /= 60;     // total number of mins 
    long minutes = work % 60; // remainder is minutes 
    long hours = work/60  // number of hours 

    // now format and return - %ld is long decimal, %02ld is zero-padded two digit long decimal 
    return [NSString stringWithFormat:@"%ld:%02ld:%02ld", hours, minutes, seconds]; 
} 
2

這是我的項目代碼:

-(NSString*)timeLeftString 
{ 
    long seconds = [self msLeft]/1000; 
    if(seconds == 0) 
     return @""; 
    if(seconds < 60) 
     return [NSString stringWithFormat: 
      pluralString(seconds, 
      NSLocalizedString(@"en|%ld second left|%ld seconds left", @"")), seconds]; 
    long minutes = seconds/60; 
    seconds -= minutes*60; 
    if(minutes < 60) 
     return [NSString stringWithFormat: 
      NSLocalizedString(@"%ld:%02ld left",@""), 
      minutes, seconds];  
    long hours = minutes/60; 
    minutes -= hours*60; 
    return [NSString stringWithFormat: 
     NSLocalizedString(@"%ld:%02ld:%02ld left",@""), 
     hours, minutes, seconds];  
} 

msLeft ---我的函數,返回以毫秒爲單位 pluralString時間---我的功能,它提供根據值格式字符串的不同部分(HTTP ://translate.sourceforge.net/wiki/l10n/pluralforms)

函數對不同的定時器值(左1秒,左5秒,左234,左1:15:14)返回不同的格式。

在任何情況下,長期運行過程中的進展不好應該是可見的

還有一個想法:如果那個時候左邊是「小」,可能已經離開的時間應該不會顯示 - (不到一分鐘?) - 只需進度條即可減少界面「視覺噪音」。

+0

感謝分享。你可以發佈你的pluralString函數嗎? – dmclean

+0

這也適用於pluralString。 https://cocoapods.org/?q=TTTLocalizedPluralString – dmclean