Konwertuj Seconds Integer do HH: MM, iPhone

Walczę z tym. Mam wartość w sekundach, którą chcę wyświetlić w etykiecie w formacie HH: MM. Szukałem w Internecie od wieków i znalazłem kilka odpowiedzi, ale albo nie do końca je zrozumiałam, albo wydają się być dziwnym sposobem robienia tego, co chcę. Gdyby ktoś mógł mi w tym pomóc, byłoby świetnie! Pamiętaj, że jestem nowy w tych grach, więc to pytanie może wydawać się naprawdę podstawowe dla bardziej doświadczonych.

Author: Leo Dabus, 2009-11-16

6 answers

Szukałem tego samego, czego ty szukasz, ale nie mogłem znaleźć. Więc napisałem jeden -

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

Działa doskonale w Swift jak również:

 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)
 }
 243
Author: Rohit Agarwal,
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/doraprojects.net/template/agent.layouts/content.php on line 54
2016-01-03 20:28:17

W iOS 8.0 i nowszych wersjach można to również zrobić za pomocą NSDateComponentsFormatter. Muszę wspomnieć, że będzie formatować ciąg bez pierwszego wiodącego zera, na przykład '9:30', ale nie '09: 30'. Ale jeśli lubisz używać formaterów, możesz użyć tego kodu:

-(NSString *)getTimeStringFromSeconds:(double)seconds
{
     NSDateComponentsFormatter *dcFormatter = [[NSDateComponentsFormatter alloc] init];
     dcFormatter.zeroFormattingBehavior = NSDateComponentsFormatterZeroFormattingBehaviorPad;
     dcFormatter.allowedUnits = NSCalendarUnitHour | NSCalendarUnitMinute;
     dcFormatter.unitsStyle = NSDateComponentsFormatterUnitsStylePositional;
     return [dcFormatter stringFromTimeInterval:seconds];
}
 30
Author: edukulele,
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/doraprojects.net/template/agent.layouts/content.php on line 54
2015-12-08 18:29:56

Tak to robię:

-(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
Author: Mongi Zaidi,
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/doraprojects.net/template/agent.layouts/content.php on line 54
2014-03-25 12:06:53

Dla 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
Author: Aks,
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/doraprojects.net/template/agent.layouts/content.php on line 54
2014-11-25 08:39:15

Podczas gdy @ Aks' odpowiedź dla Swift działa, jestem trochę sceptyczny co do wartości hardcodingu w moim kodzie. @ edukulele odpowiedź jest o wiele czystsza, ale jest w Objective-C. przetłumaczyłem ją na Swift z lekką zmianą. Zwykle zapisuję swoje formatery jako lazy var s.

private lazy var dateFormatter: NSDateComponentsFormatter = {
    let formatter = NSDateComponentsFormatter()
    formatter.zeroFormattingBehavior = .Pad
    formatter.allowedUnits = [.Hour, .Minute, .Second]
    formatter.unitsStyle = .Positional
    return formatter
}()
 6
Author: Isuru,
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/doraprojects.net/template/agent.layouts/content.php on line 54
2017-05-23 12:18:22

Dla Swift z licznikiem zegarów

    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
Author: Perry C,
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/doraprojects.net/template/agent.layouts/content.php on line 54
2015-05-12 23:04:26