Ich habe eine Menge davon seconds
von einem bestimmten Ereignis übergeben. Es ist in einem NSTimeInterval
Datentyp gespeichert .
Ich möchte es in minutes
und umwandeln seconds
.
Zum Beispiel habe ich: "326.4" Sekunden und möchte es in die folgende Zeichenfolge konvertieren: "5:26".
Was ist der beste Weg, um dieses Ziel zu erreichen?
Vielen Dank.
objective-c
iphone
nstimeinterval
seconds
minute
Ilya Suzdalnitski
quelle
quelle
Kurze Beschreibung
Verwenden Sie die NSCalendar-Methode:
(NSDateComponents *)components:(NSUInteger)unitFlags fromDate:(NSDate *)startingDate toDate:(NSDate *)resultDate options:(NSUInteger)opts
"Gibt als NSDateComponents-Objekt unter Verwendung der angegebenen Komponenten die Differenz zwischen zwei angegebenen Daten zurück." Aus der API-Dokumentation.
Erstellen Sie 2 NSDate, deren Unterschied das NSTimeInterval ist, das Sie konvertieren möchten. (Wenn Ihr NSTimeInterval aus dem Vergleich von 2 NSDate stammt, müssen Sie diesen Schritt nicht ausführen, und Sie benötigen nicht einmal das NSTimeInterval.)
Holen Sie sich Ihre Angebote von NSDateComponents
Beispielcode
Bekannte Probleme
quelle
%ld
Wenn Sie sich in einer 64-Bit-Maschine befinden.All dies sieht komplizierter aus als es sein muss! Hier ist eine kurze und süße Möglichkeit, ein Zeitintervall in Stunden, Minuten und Sekunden umzuwandeln:
Beachten Sie, wenn Sie einen Float in ein Int einfügen, erhalten Sie automatisch floor (), aber Sie können es zu den ersten beiden hinzufügen, wenn Sie sich besser fühlen :-)
quelle
Verzeih mir, dass ich eine Stack-Jungfrau bin ... Ich bin mir nicht sicher, wie ich auf Brian Ramsays Antwort antworten soll ...
Die Verwendung von round funktioniert nicht für zweite Werte zwischen 59,5 und 59,99999. Der zweite Wert ist in diesem Zeitraum 60. Verwenden Sie stattdessen Trunc ...
quelle
Wenn Sie auf iOS 8 oder OS X 10.10 oder höher abzielen, ist dies jetzt noch einfacher. Mit der neuen
NSDateComponentsFormatter
Klasse können Sie eine bestimmteNSTimeInterval
Zeichenfolge in Sekundenschnelle in eine lokalisierte Zeichenfolge konvertieren , um sie dem Benutzer anzuzeigen. Beispielsweise:Ziel c
Schnell
NSDateCompnentsFormatter
ermöglicht auch, dass diese Ausgabe in längeren Formen vorliegt. Weitere Informationen finden Sie im NSFormatter- Artikel von NSHipster . Abhängig davon, mit welchen Klassen Sie bereits arbeiten (falls nichtNSTimeInterval
), ist es möglicherweise bequemer, dem Formatierer eine InstanzNSDateComponents
oder zweiNSDate
Objekte zu übergeben, was auch über die folgenden Methoden erfolgen kann.Ziel c
Schnell
quelle
switch
oderif else
Aussagen damit nicht.NSDateComponentsFormatter
kümmert sich um alles. Stunden, Minuten, Sekunden ohne Sorgen gedruckt.Brian Ramsays Code, de-pseudofied:
quelle
Hier ist eine Swift-Version:
Kann so verwendet werden:
quelle
Ausgänge:
quelle
Da es im Wesentlichen ein Doppel ...
Teilen Sie durch 60,0 und extrahieren Sie den Integralteil und den Bruchteil.
Der integrale Bestandteil ist die gesamte Anzahl von Minuten.
Multiplizieren Sie den Bruchteil erneut mit 60,0.
Das Ergebnis sind die verbleibenden Sekunden.
quelle
Denken Sie daran, dass es sich bei der ursprünglichen Frage um eine Zeichenfolgenausgabe handelt, nicht um Pseudocode oder einzelne Zeichenfolgenkomponenten.
Vielen Antworten fehlen die Internationalisierungsprobleme, und die meisten führen die mathematischen Berechnungen von Hand durch. Alles nur so 20. Jahrhundert ...
Mach die Mathe nicht selbst (Swift 4)
Nutzung von Bibliotheken
Wenn Sie wirklich einzelne Komponenten und angenehm lesbaren Code wünschen , lesen Sie SwiftDate :
Dank an @mickmaccallum und @polarwar für die angemessene Verwendung von
DateComponentsFormatter
quelle
Wie ich das in Swift gemacht habe (einschließlich der String-Formatierung, um es als "01:23" anzuzeigen):
quelle
Swift 2 Version
quelle