2016-05-03 19 views
2


Ich habe eine Methode, die ein Etikett aktualisiert und als Stoppuhr fungiert. Es funktioniert gut, wenn ich die Zeichenfolge formatiere, um Tage zu faktorisieren fügt es einen zusätzlichen Tag hinzu.

Zum Beispiel. Wenn die Stoppuhr 10 Minuten gestartet wird vor wird das Label angezeigt werden:
01: 00: 10: 00
es nur

00 angezeigt werden soll: 00: 10: 00NSDate dateWithTimeIntervalSince1970 Hinzufügen eines zusätzlichen Tages auf

- (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; 

} 

Jede Hilfe wäre sehr dankbar .

Antwort

4

Was Sie tun, ist nicht angemessen. Ihr Ziel scheint zu sein, timeInterval in Tage, Stunden, Minuten und Sekunden zu konvertieren. Ihre Verwendung von timerDate und NSDateFormatter ist nicht der richtige Weg, um dieses Ziel zu erreichen.

timeInterval ist kein Offset vom 1. Januar 1970 und timeInterval ist kein Datum.

Was Sie tun sollten, ist der Unterschied zwischen currentDate und dateValue als eine Reihe von 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

Danke rmaddy! Ich habe meine endgültige Antwort von Ihrer Lösung erhalten. Gute Arbeit – rmon2852

0

Es gibt keinen „zusätzlichen Tag“, das „Datum“ Sie produzieren ist ein Punkt in der Zeit nach dem 1. Januar 1970, also, wenn Ihr Format des Tag mindestens Sie erhalten ein 1 ...

Bleiben Sie einfach mit dem NSTimeInterval Wert und verwenden Sie NSDateComponentsFormatter - die auch Zeitintervalle trotz des Namens formatiert - oder machen Sie einfach die Mathematik selbst, um die Sekunden, Minuten usw. zu erhalten und diese zu formatieren.

HTH

+0

Natürlich können Sie ein Zeitintervall von -10 Minuten haben und Sie erhalten am 31. Dezember 1969 um 23:50:00. – gnasher729

+0

@ gnasher729 - natürlich ;-) Ich hätte vielleicht eher "relativ zu" sagen sollen als "nachher", aber ich sagte "du produzierst" also ist es richtig wie es steht (natürlich durch Zufall) :-) – CRD

Verwandte Themen