16 Stimmen

NSNumber (double) Wert in Zeit umwandeln

Ich versuche, einen Wert wie "898.171813964844" in 00:17:02 (hh:mm:ss) zu konvertieren.

Wie lässt sich dies in Objective C bewerkstelligen?

Danke für die Hilfe!

0 Stimmen

Sie könnten einfache Arithmetik verwenden, aber ich verstehe nicht, wie 898,171813964844 00:17:02 sein soll. Worauf bezieht sich der Float?

0 Stimmen

Hey, in Ruby mache ich einfach Time.at(time - 3600).strftime("%H:%M:%S") und erhalte das richtige Ergebnis. (time ist der Float-Wert)

31voto

phx Punkte 5867

Endgültige Lösung:

NSNumber *time = [NSNumber numberWithDouble:([online_time doubleValue] - 3600)];
NSTimeInterval interval = [time doubleValue];    
NSDate *online = [NSDate date];
online = [NSDate dateWithTimeIntervalSince1970:interval];    
NSDateFormatter *dateFormatter = [[[NSDateFormatter alloc] init] autorelease];
[dateFormatter setDateFormat:@"HH:mm:ss"];

NSLog(@"result: %@", [dateFormatter stringFromDate:online]);

9voto

Volker Voecking Punkte 4863

Unter der Annahme, dass Sie nur an Stunden, Minuten und Sekunden interessiert sind und der Eingabewert kleiner oder gleich 86400 ist, könnten Sie etwas wie folgt tun:

NSNumber *theDouble = [NSNumber numberWithDouble:898.171813964844];

int inputSeconds = [theDouble intValue];
int hours =  inputSeconds / 3600;
int minutes = ( inputSeconds - hours * 3600 ) / 60; 
int seconds = inputSeconds - hours * 3600 - minutes * 60; 

NSString *theTime = [NSString stringWithFormat:@"%.2d:%.2d:%.2d", hours, minutes, seconds];

3voto

So Over It Punkte 3648

Ich weiß, die Antwort wurde bereits akzeptiert, aber hier ist meine Antwort mit NSDateFormatter und unter Berücksichtigung der Zeitzone (zu Ihrer Zeitzone Stunden [zB GMT+4] wird unerwartet hinzugefügt @Ben)

    NSTimeInterval intervalValue = 898.171813964844;
    NSDateFormatter *hmsFormatter = [[NSDateFormatter alloc] init];
    [hmsFormatter setDateFormat:@"HH:mm:ss"];
    [hmsFormatter setTimeZone:[NSTimeZone timeZoneForSecondsFromGMT:0]];
    NSLog(@"formatted date: %@", [hmsFormatter stringFromDate:[NSDate dateWithTimeIntervalSinceReferenceDate:intervalValue]]);

(Randnotiz) @phx: Wenn man davon ausgeht, dass 898,171813964844 in Sekunden angegeben ist, würde dies 00:14:58 und nicht 00:17:02 entsprechen.

1voto

mouviciel Punkte 64583
  1. Konvertieren Sie Ihren NSNumber-Wert in ein NSTimeInterval mit -doubleValue
  2. Konvertieren Sie Ihren NSTimeInterval-Wert in ein NSDate mit +dateWithTimeIntervalSinceNow:
  3. Konvertieren Sie Ihr NSDate in einen NSString mit -descriptionWithCalendarFormat:timeZone:locale:

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