2016-05-03 49 views
2
上添加額外的一天


我有一種更新標籤並充當秒錶的方法。它工作得很好接受,當我格式化字符串的因素天,它增加了一個額外的一天。

例如。如果啓動秒錶,十分鐘前的標籤會顯示:
01:00:10:00
它應該只是顯示

00:00:10:00NSDate dateWithTimeIntervalSince1970在

- (void)updateTimer 
{ 
    NSDate *currentDate = [NSDate date]; 
    NSDate *dateValue=[[NSUserDefaults standardUserDefaults] objectForKey:@"pickStart"]; 

    NSTimeInterval timeInterval = [currentDate timeIntervalSinceDate:dateValue]; 

    NSDate *timerDate = [NSDate dateWithTimeIntervalSince1970:timeInterval]; 

    // Create a date formatter 
    NSDateFormatter *dateFormatter = [[NSDateFormatter alloc] init]; 
    [dateFormatter setDateFormat:@"dd:HH:mm:ss"]; 
    [dateFormatter setTimeZone:[NSTimeZone timeZoneForSecondsFromGMT:0.0]]; 

    // Format the elapsed time and set it to the label 
    NSString *timeString = [dateFormatter stringFromDate:timerDate]; 
    self.stopWatchLabel.text = timeString; 

} 

任何幫助將不勝感激。

回答

4

你在做什麼是不恰當的。你的目標似乎是將timeInterval轉換成天,小時,分鐘和秒。您使用timerDateNSDateFormatter不是實現該目標的正確方法。

timeInterval不是從1970年1月1日開始的偏移,而timeInterval也不代表日期。

你應該做的是獲得currentDatedateValue之間的差異作爲一組NSDateComponents

- (void)updateTimer { 
    NSDate *currentDate = [NSDate date]; 
    NSDate *dateValue = [[NSUserDefaults standardUserDefaults] objectForKey:@"pickStart"]; 

    unsigned int unitFlags = NSDayCalendarUnit | NSHourCalendarUnit | NSMinuteCalendarUnit | NSSecondCalendarUnit; 
    NSDateComponents *comps = [[NSCalendar currentCalendar] components:unitFlags fromDate:dateValue toDate:currentDate options:0]; 
    int days = [comps day]; 
    int hours = [comps hours]; 
    int minutes = [comps minutes]; 
    int seconds = [comps seconds]; 

    NSString *timeString = [NSString stringWithFormat:@"%d:%02d:%02d:%02d", days, hours, minutes, seconds]; 
    self.stopWatchLabel.text = timeString; 
} 
+0

謝謝rmaddy!我設法從你的解決方案中得到我的最終答案。良好的工作 – rmon2852

0

沒有「額外的一天」,「約會」你生產的是1970年1月1日之後的時間點,因此,如果您的格式包括一天你至少1 ...

只需使用NSTimeInterval值並使用NSDateComponentsFormatter - 即使名稱不變,也可以格式化時間間隔 - 或者只是自己計算數字以獲取秒數,分鐘數等等,然後對其進行格式化。

HTH

+0

當然,你可以有一個-10分鐘的時間間隔,你將於19:50:00得到1969年12月31日。 – gnasher729

+0

@ gnasher729 - 當然;-)我也許應該說「相對於」而不是「之後」,但我確實說過「你生產」,所以它是正確的(當然,僥倖:-)) – CRD