Convertir Segundos Entero A HH:MM, iPhone

Estoy luchando con esto. Tengo un valor en segundos que quiero mostrar en una etiqueta en el formato HH:MM. He buscado en la internet para las edades y encontrar algunas respuestas, pero no completamente entendido, o que parecen como una extraña manera de hacer lo que quiero. Si alguien me pudiera ayudar en este que sería genial! Ten en cuenta que soy nuevo en esto de juegos por lo que esta pregunta puede parecer muy básico, uno de los más experimentados por ahí.

InformationsquelleAutor Stumf | 2009-11-16

6 Kommentare

  1. 250

    Yo estaba buscando lo mismo que usted está buscando, pero no podía encontrar. Así que escribí una

    - (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 a la perfección en Swift así:

     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)
     }
    • Gracias por tu respuesta, esto se parece a lo que yo necesito, pero parece que no puede utilizar sin errores. Estoy convencido de que es el error de mi lado. Si no te importa ayudarme a seguir: Mi valor es un float y es que en cuestión de segundos. Tengo que mostrar en una etiqueta cuando un botón es presionado. Qué sería de su código, y cómo puedo hacer que mi etiqueta de mostrar el valor en el formato HH:MM? Muchas gracias, Stu
    • Ordenados, gracias por tu ayuda. Su respuesta y stackoverflow.com/questions/1259028/… respuesta por Pholker fueron la razón por la que yo podía hacer esto! Gracias de nuevo
    • Una gran cosa que se hace de este un método de la clase y se enrolla en una categoría en la NSString. De acuerdo con bitcruncher, muy limpio.
    • El cálculo de minutos, ¿por qué tomar el módulo de la división?!? minutes = totalSeconds / 60. No complicarse demasiado.
    • Porque hay 60 minutos en una hora. Si usted no tiene el modulo, su cadena de leer «01:60:00» en lugar de «01:00:00» por 3600 segundos.
  2. 32

    En iOS 8.0 y versiones superiores también se puede hacer con NSDateComponentsFormatter. Debo mencionar que el formato de la cadena sin el primer cero a la izquierda, por ejemplo, «9:30′, pero no ’09:30′. Pero si te gusta usar formateadores, puede utilizar 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];
    }
    • Si usted desea conseguir segundos en el resultado, así que usted necesita para agregar NSCalendarUnitSecond unidad a la allowedUnits. Este ejemplo funciona para aplicaciones de Mac OS X también.
    • Esta espera un doble no es un int. Al menos en Swift.
  3. 10

    Esta es la forma en que yo 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];
    }
  4. 7

    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)"
        }
    }
  5. 6

    Mientras que @Aks’ respuesta para Swift funciona, estoy un poco escéptico acerca de codificar los valores en mi código. @edukulele del respuesta es mucho más cleaner pero en Objective-C. I traducido a Swift con un ligero cambio. Yo, normalmente, escribo mi formateadores como lazy vars.

    private lazy var dateFormatter: NSDateComponentsFormatter = {
        let formatter = NSDateComponentsFormatter()
        formatter.zeroFormattingBehavior = .Pad
        formatter.allowedUnits = [.Hour, .Minute, .Second]
        formatter.unitsStyle = .Positional
        return formatter
    }()
    • Este es H:MM, no HH:MM como se solicitó.
  6. 0

    Para Swift con reloj contar

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

Kommentieren Sie den Artikel

Bitte geben Sie Ihren Kommentar ein!
Bitte geben Sie hier Ihren Namen ein

Pruebas en línea