J'en ai passé une partie à seconds
partir d'un certain événement. Il est stocké dans un NSTimeInterval
type de données.
Je veux le convertir en minutes
et seconds
.
Par exemple, j'ai: "326,4" secondes et je veux le convertir dans la chaîne suivante: "5:26".
Quelle est la meilleure façon d'atteindre cet objectif?
Merci.
objective-c
iphone
nstimeinterval
seconds
minute
Ilya Suzdalnitski
la source
la source
Brève description
Utilisez la méthode NSCalendar:
(NSDateComponents *)components:(NSUInteger)unitFlags fromDate:(NSDate *)startingDate toDate:(NSDate *)resultDate options:(NSUInteger)opts
"Renvoie, en tant qu'objet NSDateComponents utilisant des composants spécifiés, la différence entre deux dates fournies". De la documentation de l'API.
Créez 2 NSDate dont la différence est le NSTimeInterval que vous souhaitez convertir. (Si votre NSTimeInterval provient de la comparaison de 2 NSDate, vous n'avez pas besoin de faire cette étape, et vous n'avez même pas besoin de NSTimeInterval).
Obtenez vos devis auprès de NSDateComponents
Exemple de code
Problèmes connus
la source
%ld
si vous êtes sur une machine 64 bits.Tous ces éléments ont l'air plus compliqués qu'ils ne devraient l'être! Voici une façon courte et douce de convertir un intervalle de temps en heures, minutes et secondes:
Notez que lorsque vous mettez un float dans un int, vous obtenez automatiquement floor (), mais vous pouvez l'ajouter aux deux premiers si si vous vous sentez mieux :-)
la source
Pardonnez-moi d'être vierge de Stack ... Je ne sais pas comment répondre à la réponse de Brian Ramsay ...
L'utilisation de round ne fonctionnera pas pour les secondes valeurs comprises entre 59,5 et 59,99999. La deuxième valeur sera de 60 pendant cette période. Utilisez plutôt trunc ...
la source
Si vous ciblez iOS 8 ou OS X 10.10 ou plus, cela devient beaucoup plus facile. La nouvelle
NSDateComponentsFormatter
classe vous permet de convertir une donnéeNSTimeInterval
de sa valeur en secondes en une chaîne localisée à afficher à l'utilisateur. Par exemple:Objectif c
Rapide
NSDateCompnentsFormatter
permet également que cette sortie soit sous des formes plus longues. Plus d'informations peuvent être trouvées dans l' article NSFormatter de NSHipster . Et en fonction des classes avec lesquelles vous travaillez déjà (sinonNSTimeInterval
), il peut être plus pratique de transmettre au formateur une instance deNSDateComponents
ou deuxNSDate
objets, ce qui peut également être fait via les méthodes suivantes.Objectif c
Rapide
la source
switch
ouif else
déclarations avec cela.NSDateComponentsFormatter
s'occupe de tout. Heures, minutes, secondes imprimées sans aucun souci.Code de Brian Ramsay, dé-pseudofié:
la source
Voici une version Swift:
Peut être utilisé comme ceci:
la source
Les sorties:
la source
Puisque c'est essentiellement un double ...
Divisez par 60,0 et extrayez la partie intégrale et la partie fractionnaire.
La partie intégrale sera le nombre entier de minutes.
Multipliez à nouveau la partie fractionnaire par 60,0.
Le résultat sera les secondes restantes.
la source
N'oubliez pas que la question d'origine concerne une sortie de chaîne, pas un pseudo-code ou des composants de chaîne individuels.
De nombreuses réponses manquent les problèmes d'internationalisation et la plupart font les calculs mathématiques à la main. Tout juste si 20e siècle ...
Ne faites pas le calcul vous-même (Swift 4)
Tirer parti des bibliothèques
Si vous voulez vraiment des composants individuels et un code agréablement lisible, consultez SwiftDate :
Crédits à @mickmaccallum et @polarwar pour une utilisation adéquate de
DateComponentsFormatter
la source
Comment j'ai fait cela dans Swift (y compris la mise en forme de la chaîne pour l'afficher comme "01:23"):
la source
Version Swift 2
la source