Recebi uma parte seconds
disso de um determinado evento. É armazenado em um NSTimeInterval
tipo de dados.
Quero convertê-lo em minutes
e seconds
.
Por exemplo, tenho: "326,4" segundos e desejo convertê-lo na seguinte string: "5:26".
Qual é a melhor forma de atingir esse objetivo?
Obrigado.
objective-c
iphone
nstimeinterval
seconds
minute
Ilya Suzdalnitski
fonte
fonte
Descrição breve
Use o método NSCalendar:
(NSDateComponents *)components:(NSUInteger)unitFlags fromDate:(NSDate *)startingDate toDate:(NSDate *)resultDate options:(NSUInteger)opts
"Retorna, como um objeto NSDateComponents usando componentes especificados, a diferença entre duas datas fornecidas". Da documentação da API.
Crie 2 NSDate cuja diferença é o NSTimeInterval que você deseja converter. (Se o seu NSTimeInterval vem da comparação de 2 NSDate, você não precisa fazer esta etapa e nem mesmo precisa do NSTimeInterval).
Obtenha suas cotações de NSDateComponents
Código de amostra
Problemas conhecidos
fonte
%ld
se você estiver em uma máquina de 64 bits.Tudo isso parece mais complicado do que precisa ser! Esta é uma maneira curta e agradável de converter um intervalo de tempo em horas, minutos e segundos:
Observe que quando você coloca um float em um int, você obtém floor () automaticamente, mas pode adicioná-lo aos dois primeiros se se sentir melhor :-)
fonte
Perdoe-me por ser uma virgem Stack ... Não tenho certeza de como responder à resposta de Brian Ramsay ...
O uso de arredondamento não funcionará para os segundos valores entre 59,5 e 59,99999. O segundo valor será 60 durante este período. Em vez disso, use trunc ...
fonte
Se você tem como alvo o iOS 8 ou o OS X 10.10 ou superior, isso ficou muito mais fácil. A nova
NSDateComponentsFormatter
classe permite que você converta um dadoNSTimeInterval
de seu valor em segundos em uma string localizada para mostrar ao usuário. Por exemplo:Objective-C
Rápido
NSDateCompnentsFormatter
também permite que essa saída seja em formatos mais longos. Mais informações podem ser encontradas no artigo NSFormatter do NSHipster . E dependendo das classes com as quais você já está trabalhando (se nãoNSTimeInterval
), pode ser mais conveniente passar ao formatador uma instância deNSDateComponents
, ou doisNSDate
objetos, o que também pode ser feito por meio dos métodos a seguir.Objective-C
Rápido
fonte
switch
ouif else
declarações com isso.NSDateComponentsFormatter
cuida de tudo. Horas, minutos, segundos impressos sem qualquer preocupação.Código de Brian Ramsay, despseudificado:
fonte
Esta é uma versão do Swift:
Pode ser usado assim:
fonte
Saídas:
fonte
Uma vez que é essencialmente um duplo ...
Divida por 60,0 e extraia a parte integral e a parte fracionária.
A parte integrante será o número inteiro de minutos.
Multiplique a parte fracionária por 60,0 novamente.
O resultado serão os segundos restantes.
fonte
Lembre-se de que a questão original é sobre uma saída de string, não pseudocódigo ou componentes de string individuais.
Muitas respostas estão perdendo os problemas de internacionalização e a maioria fazendo os cálculos matemáticos à mão. Tudo tão século 20 ...
Não faça a matemática sozinho (Swift 4)
Aproveite as bibliotecas
Se você realmente deseja componentes individuais e um código de fácil leitura, verifique SwiftDate :
Créditos para @mickmaccallum e @polarwar pelo uso adequado de
DateComponentsFormatter
fonte
Como fiz isso em Swift (incluindo a formatação da string para mostrar como "01:23"):
fonte
Versão Swift 2
fonte