web-dev-qa-db-fra.com

Conversion de secondes en HH: MM, iPhone

Je me bats avec ça. J'ai une valeur en secondes que je veux afficher dans une étiquette au format HH: MM. J'ai cherché sur Internet depuis des siècles et j'ai trouvé des réponses, mais soit je ne les ai pas entièrement comprises, soit elles semblent être une étrange façon de faire ce que je veux. Si quelqu'un pouvait m'aider sur celui-ci, ce serait génial! Gardez à l'esprit que je suis nouveau dans ces jeux, donc cette question peut sembler vraiment basique pour les plus expérimentés.

68
Stumf

Je cherchais la même chose que vous cherchez mais je n'en ai pas trouvé. J'en ai donc écrit un -

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

fonctionne parfaitement aussi dans Swift:

 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)
 }
250
Rohit Agarwal

Dans iOS 8.0 et les versions supérieures, cela peut également être fait avec NSDateComponentsFormatter. Je dois mentionner qu'il formatera la chaîne sans le premier zéro, par exemple '9:30', mais pas '09: 30 '. Mais si vous aimez utiliser des formateurs, vous pouvez utiliser ce code:

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

Voici comment je le fais:

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

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

Alors que @Aks ' réponse pour Swift fonctionne, je suis un peu sceptique quant aux valeurs de codage en dur dans mon code. @ Edukulele's réponse est beaucoup plus plus propre mais il est en Objective-C. Je l'ai traduit en Swift avec un léger changement. J'écris normalement mes formateurs comme lazy vars.

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

Pour Swift avec comptage d'horloge

    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)"
        }   
    }
0
Perry C