example objective-c iphone time formatting

objective c - example - Convertir segundos enteros a HH: MM, iPhone



swift date format (6)

Estoy luchando con esto. Tengo un valor en segundos que quiero mostrar en una etiqueta en formato HH: MM. He buscado en Internet durante años y he encontrado algunas respuestas, pero o no las he entendido del todo, o me parecen una manera extraña de hacer lo que quiero. ¡Si alguien pudiera ayudarme en esto, sería genial! Tenga en cuenta que soy nuevo en este juego, por lo que esta pregunta puede parecer muy básica para los más experimentados.


Así es como lo hago:

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


En iOS 8.0 y versiones superiores, también se puede hacer con NSDateComponentsFormatter . Debo mencionar que formateará la cadena sin el primer cero inicial, por ejemplo ''9:30'', pero no ''09: 30 ''. Pero si te gusta usar formateadores, puedes usar este código:

-(NSString *)getTimeStringFromSeconds:(double)seconds { NSDateComponentsFormatter *dcFormatter = [[NSDateComponentsFormatter alloc] init]; dcFormatter.zeroFormattingBehavior = NSDateComponentsFormatterZeroFormattingBehaviorPad; dcFormatter.allowedUnits = NSCalendarUnitHour | NSCalendarUnitMinute; dcFormatter.unitsStyle = NSDateComponentsFormatterUnitsStylePositional; return [dcFormatter stringFromTimeInterval:seconds]; }


Estaba buscando lo mismo que estás buscando pero no pude encontrar uno. Así que escribí uno -

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

funciona perfectamente en Swift también:

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) }


Mientras que la answer de @Aks para Swift funciona, soy un poco escéptico sobre los valores de codificación en mi código. La answer @ edukulele es mucho más limpia, pero está en Objective-C. Lo traduje a Swift con un ligero cambio. Normalmente escribo mis formateadores como varías lazy var .

private lazy var dateFormatter: NSDateComponentsFormatter = { let formatter = NSDateComponentsFormatter() formatter.zeroFormattingBehavior = .Pad formatter.allowedUnits = [.Hour, .Minute, .Second] formatter.unitsStyle = .Positional return formatter }()


Para Swift con conteo de reloj

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)" } }


Para 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)" } }