Tengo una cantidad de seconds
eso que pasó de cierto evento. Está almacenado en un NSTimeInterval
tipo de datos.
Quiero convertirlo en minutes
y seconds
.
Por ejemplo, tengo: "326,4" segundos y quiero convertirlo en la siguiente cadena: "5:26".
¿Cuál es la mejor forma de lograr este objetivo?
Gracias.
objective-c
iphone
nstimeinterval
seconds
minute
Ilya Suzdalnitski
fuente
fuente
Breve descripción
Utilice el método NSCalendar:
(NSDateComponents *)components:(NSUInteger)unitFlags fromDate:(NSDate *)startingDate toDate:(NSDate *)resultDate options:(NSUInteger)opts
"Devuelve, como un objeto NSDateComponents utilizando componentes especificados, la diferencia entre dos fechas proporcionadas". De la documentación de la API.
Cree 2 NSDate cuya diferencia sea el NSTimeInterval que desea convertir. (Si su NSTimeInterval proviene de comparar 2 NSDate, no es necesario que realice este paso y ni siquiera necesita NSTimeInterval).
Obtenga sus cotizaciones de NSDateComponents
Código de muestra
Problemas conocidos
fuente
%ld
si está en una máquina de 64 bits.¡Todos estos parecen más complicados de lo que deberían ser! A continuación, se muestra una forma breve y sencilla de convertir un intervalo de tiempo en horas, minutos y segundos:
Tenga en cuenta que cuando coloca un flotador en un int, obtiene floor () automáticamente, pero puede agregarlo a los dos primeros si lo hace sentir mejor :-)
fuente
Perdóname por ser virgen de Stack ... No estoy seguro de cómo responder a la respuesta de Brian Ramsay ...
Usar round no funcionará para los segundos valores entre 59.5 y 59.99999. El segundo valor será 60 durante este período. Utilice trunc en su lugar ...
fuente
Si su objetivo es iOS 8 o OS X 10.10 o superior, esto es mucho más fácil. La nueva
NSDateComponentsFormatter
clase le permite convertir unNSTimeInterval
valor dado de su valor en segundos a una cadena localizada para mostrársela al usuario. Por ejemplo:C objetivo
Rápido
NSDateCompnentsFormatter
también permite que esta salida esté en formas más largas. Puede encontrar más información en el artículo NSFormatter de NSHipster . Y dependiendo de las clases con las que ya esté trabajando (si noNSTimeInterval
), puede ser más conveniente pasar al formateador una instancia deNSDateComponents
, o dosNSDate
objetos, lo que también se puede hacer a través de los siguientes métodos.C objetivo
Rápido
fuente
switch
oif else
declaraciones con esto.NSDateComponentsFormatter
se encarga de todo. Horas, minutos, segundos impresos sin preocupaciones.Código de Brian Ramsay, des-pseudofied:
fuente
Aquí hay una versión Swift:
Puede usarse así:
fuente
Salidas:
fuente
Dado que es esencialmente un doble ...
Dividir por 60.0 y extraer la parte integral y la parte fraccionaria.
La parte integral será el número entero de minutos.
Multiplica la parte fraccionaria por 60.0 nuevamente.
El resultado serán los segundos restantes.
fuente
Recuerde que la pregunta original se trata de una salida de cadena, no de pseudocódigo o componentes de cadena individuales.
A muchas respuestas les faltan los problemas de internacionalización y la mayoría hace los cálculos matemáticos a mano. Todo tan del siglo XX ...
No hagas las matemáticas tú mismo (Swift 4)
Aprovechar las bibliotecas
Si realmente desea componentes individuales y un código agradablemente legible, consulte SwiftDate :
Créditos a @mickmaccallum y @polarwar por el uso adecuado de
DateComponentsFormatter
fuente
Cómo hice esto en Swift (incluido el formato de cadena para mostrarlo como "01:23"):
fuente
Versión Swift 2
fuente