26 Stimmen

Umrechnung von Sekunden in Tage, Minuten und Stunden in Obj-c

Wie kann ich in Objective-C eine ganze Zahl (die für Sekunden steht) in Tage, Minuten und Stunden umwandeln?

Danke!

49voto

fish Punkte 1870

In diesem Fall müssen Sie einfach nur dividieren.

days = num_seconds / (60 * 60 * 24);
num_seconds -= days * (60 * 60 * 24);
hours = num_seconds / (60 * 60);
num_seconds -= hours * (60 * 60);
minutes = num_seconds / 60;

Für anspruchsvollere Datumsberechnungen, wie z. B. die Anzahl der Tage innerhalb der zehn Millionen Sekunden nach 15 Uhr am 19. Januar 1983, würden Sie die NSCalendar-Klasse zusammen mit NSDateComponents verwenden. Apples Anleitung zur Programmierung von Datum und Uhrzeit hilft Ihnen dabei.

37voto

Amr Faisal Punkte 1954

Versuchen Sie dies,

int forHours = seconds / 3600, 
remainder = seconds % 3600, 
forMinutes = remainder / 60, 
forSeconds = remainder % 60;

und Sie können es verwenden, um weitere Details wie Tage, Wochen, Monate und Jahre zu erhalten, indem Sie das gleiche Verfahren anwenden

17voto

Sean Marraffa Punkte 402

Ich weiß, dies ist ein alter Beitrag, aber ich wollte ihn trotzdem teilen. Der folgende Code ist das, was ich verwende.

int seconds = (totalSeconds % 60);
int minutes = (totalSeconds % 3600) / 60;
int hours = (totalSeconds % 86400) / 3600;
int days = (totalSeconds % (86400 * 30)) / 86400;

Erste Zeile - Wir erhalten den Rest der Sekunden, wenn wir durch die Anzahl der Sekunden in einer Minute dividieren.

Zweite Zeile - Wir erhalten den Rest der Sekunden, nachdem wir durch die Anzahl der Sekunden in einer Stunde dividiert haben. Dann teilen wir das durch die Sekunden in einer Minute.

Dritte Zeile - Wir erhalten den Rest der Sekunden, nachdem wir durch die Anzahl der Sekunden eines Tages dividiert haben. Dann teilen wir das durch die Anzahl der Sekunden in einer Stunde.

Vierte Zeile - Wir erhalten den Sekundenrest, nachdem wir durch die Anzahl der Sekunden in einem Monat dividiert haben. Dann teilen wir das durch die Anzahl der Sekunden eines Tages. Für Tage könnte man einfach folgendes verwenden...

int days = totalSeconds / 86400;

Wenn wir aber die obige Zeile verwenden und weitergehen wollen, um Monate zu erhalten, würden wir am Ende 1 Monat und 30 Tage erhalten, obwohl wir nur 1 Monat erhalten wollten.

Öffnen Sie einen Playground in Xcode und probieren Sie ihn aus.

7voto

JeanNicolas Punkte 318

Der bevorzugte Weg in Objective-C dürfte dieser sein, wie von Apple in der Dokumentation empfohlen.

  NSDate *startDate = [NSDate date];
    NSDate *endDate = [NSDate dateWithTimeInterval:(365*24*60*60*3+24*60*60*129) sinceDate:startDate];

    NSCalendar *gregorian = [[NSCalendar alloc]
                             initWithCalendarIdentifier:NSGregorianCalendar];

    NSUInteger unitFlags = NSYearCalendarUnit | NSMonthCalendarUnit | NSDayCalendarUnit;
    NSDateComponents *components = [gregorian components:unitFlags
                                                fromDate:startDate
                                                  toDate:endDate options:0];
    NSInteger years = [components year];
    NSInteger months = [components month];
    NSInteger days = [components day]; 
    NSLog(@"years = %ld months = %ld days = %ld",years,months,days);

Achten Sie darauf, dass Sie keine Komponenten abrufen, die nicht mit den unitFlags definiert sind, die ganze Zahl wird "undefiniert" sein.

3voto

Craig Detrick Punkte 31

Verwenden Sie die eingebaute Funktion strftime():

static char timestr[80];
char * HHMMSS ( time_t secs )
{
    struct tm ts;
    ts = *localtime(&secs);
    strftime(timestr, sizeof(timestr), "%a %b %d %H:%M:%S %Y %Z", &ts); // "Mon May 1, 2012 hh:mm:ss zzz"
    return timestr;
}

CodeJaeger.com

CodeJaeger ist eine Gemeinschaft für Programmierer, die täglich Hilfe erhalten..
Wir haben viele Inhalte, und Sie können auch Ihre eigenen Fragen stellen oder die Fragen anderer Leute lösen.

Powered by:

X