Ich kämpfe damit. Ich habe einen Wert in Sekunden, den ich in einem Etikett im HH: MM-Format anzeigen möchte. Ich habe lange im Internet gesucht und einige Antworten gefunden, aber entweder nicht vollständig verstanden, oder sie scheinen eine seltsame Art zu sein, das zu tun, was ich will. Wenn mir jemand dabei helfen könnte, wäre das großartig! Denken Sie daran, dass ich neu in diesen Spielen bin, so dass diese Frage für die erfahreneren da draußen wie eine wirklich grundlegende Frage erscheinen kann.
objective-c
iphone
time
formatting
Stumf
quelle
quelle
Antworten:
Ich habe nach dem gesucht, was Sie suchen, konnte aber keines finden. Also schrieb ich eine -
- (NSString *)timeFormatted:(int)totalSeconds { int seconds = totalSeconds % 60; int minutes = (totalSeconds / 60) % 60; int hours = totalSeconds / 3600; return [NSString stringWithFormat:@"%02d:%02d:%02d",hours, minutes, seconds]; }
funktioniert auch in Swift perfekt :
func timeFormatted(totalSeconds: Int) -> String { let seconds: Int = totalSeconds % 60 let minutes: Int = (totalSeconds / 60) % 60 let hours: Int = totalSeconds / 3600 return String(format: "%02d:%02d:%02d", hours, minutes, seconds) }
quelle
minutes = totalSeconds / 60
. Überkomplizieren Sie nicht.In iOS 8.0 und höheren Versionen ist dies ebenfalls möglich
NSDateComponentsFormatter
. Ich muss erwähnen, dass die Zeichenfolge ohne erste führende Null formatiert wird, zum Beispiel '9:30', aber nicht '09: 30 '. Wenn Sie jedoch Formatierer verwenden möchten, können Sie diesen Code verwenden:-(NSString *)getTimeStringFromSeconds:(double)seconds { NSDateComponentsFormatter *dcFormatter = [[NSDateComponentsFormatter alloc] init]; dcFormatter.zeroFormattingBehavior = NSDateComponentsFormatterZeroFormattingBehaviorPad; dcFormatter.allowedUnits = NSCalendarUnitHour | NSCalendarUnitMinute; dcFormatter.unitsStyle = NSDateComponentsFormatterUnitsStylePositional; return [dcFormatter stringFromTimeInterval:seconds]; }
quelle
NSCalendarUnitSecond
den erlaubten Einheiten eine Einheit hinzufügen. Dieses Beispiel funktioniert auch für Mac OS X-Anwendungen.So mache ich es:
-(NSString *)formatTimeFromSeconds:(int)numberOfSeconds { int seconds = numberOfSeconds % 60; int minutes = (numberOfSeconds / 60) % 60; int hours = numberOfSeconds / 3600; //we have >=1 hour => example : 3h:25m if (hours) { return [NSString stringWithFormat:@"%dh:%02dm", hours, minutes]; } //we have 0 hours and >=1 minutes => example : 3m:25s if (minutes) { return [NSString stringWithFormat:@"%dm:%02ds", minutes, seconds]; } //we have only seconds example : 25s return [NSString stringWithFormat:@"%ds", seconds]; }
quelle
Für Swift:
func formatTimeInSec(totalSeconds: Int) -> String { let seconds = totalSeconds % 60 let minutes = (totalSeconds / 60) % 60 let hours = totalSeconds / 3600 let strHours = hours > 9 ? String(hours) : "0" + String(hours) let strMinutes = minutes > 9 ? String(minutes) : "0" + String(minutes) let strSeconds = seconds > 9 ? String(seconds) : "0" + String(seconds) if hours > 0 { return "\(strHours):\(strMinutes):\(strSeconds)" } else { return "\(strMinutes):\(strSeconds)" } }
quelle
Während @Aks ' Antwort für Swift funktioniert, bin ich ein wenig skeptisch gegenüber der Hardcodierung von Werten in meinem Code. Die Antwort von @ edukulele ist viel sauberer, aber in Objective-C. Ich übersetzte es mit einer kleinen Änderung in Swift. Normalerweise schreibe ich meine Formatierer als
lazy var
s.private lazy var dateFormatter: NSDateComponentsFormatter = { let formatter = NSDateComponentsFormatter() formatter.zeroFormattingBehavior = .Pad formatter.allowedUnits = [.Hour, .Minute, .Second] formatter.unitsStyle = .Positional return formatter }()
quelle
H:MM
nichtHH:MM
wie gewünscht.Für Swift mit Uhrzeit
var timer = NSTimer() var count = 1 func updateTime() { count++ let seconds = count % 60 let minutes = (count / 60) % 60 let hours = count / 3600 let strHours = hours > 9 ? String(hours) : "0" + String(hours) let strMinutes = minutes > 9 ? String(minutes) : "0" + String(minutes) let strSeconds = seconds > 9 ? String(seconds) : "0" + String(seconds) if hours > 0 { clockOutlet.text = "\(strHours):\(strMinutes):\(strSeconds)" } else { clockOutlet.text = "\(strMinutes):\(strSeconds)" } }
quelle