Como converter um NSDate
timestamp para Unix? Eu li muitos posts que fazem o contrário. Mas não estou encontrando nada relacionado à minha pergunta.
ios
iphone
nsdate
unix-timestamp
neha
fonte
fonte
Um registro de data e hora do Unix é o número de segundos desde 00:00:00 UTC de 1º de janeiro de 1970. É representado pelo tipo time_t , que geralmente é um tipo inteiro de 32 bits assinado (long ou int).
O iOS fornece - (NSTimeInterval) timeIntervalSince1970 para objetos NSDate que retornam o número de segundos desde 00:00:00 GMT de 1º de janeiro de 1970. NSTimeInterval é um tipo de ponto flutuante duplo para que você obtenha os segundos e frações de segundo.
Como ambos têm a mesma referência (meia-noite 1Jan1970 UTC) e são ambos em segundos, a conversão é fácil, converta o NSTimeInterval em um time_t, arredondando ou truncando, dependendo de suas necessidades:
fonte
int unixTime = floor([piece.piece_last_view timeIntervalSince1970])
onde piece.piece.last_view é um NSDateVocê pode criar uma data de data e hora unix a partir de uma data da seguinte maneira:
fonte
OBSERVAÇÃO: - O carimbo de data e hora deve estar na zona UTC; portanto, converto nosso horário local em horário UTC.
fonte
Rápido
Atualizado para o Swift 3
Notas
timeIntervalSince1970
retornaTimeInterval
, que é uma tipealias paraDouble
.Se você quisesse seguir o outro caminho, poderia fazer o seguinte:
fonte
Se você deseja armazenar esse tempo em um banco de dados ou enviá-lo pelo servidor ... o melhor é usar os carimbos de data e hora do Unix. Aqui está um pequeno trecho para obter isso:
fonte
[[NSTimeZone systemTimeZone] secondsFromGMT]]
:? Por favor, explique pouco.Minha maneira preferida é simplesmente:
fonte
Conforme sugestão do @ kexik, usando a função de horário UNIX, conforme abaixo:
. Conforme minha experiência - não use timeIntervalSince1970, ele fornece o carimbo de data / hora da época - número de segundos em que você está atrás do GMT.Costumava haver um bug com [[NSDate date] timeIntervalSince1970], que costumava adicionar / subtrair horas com base no fuso horário do telefone, mas parece estar resolvido agora.
fonte
primeiro unixtime 1532278070
segundo tempo unix 1532278070.461380
terceiro tempo unixtime 1532278070
fonte
Se você precisar de carimbo de data / hora como uma string.
fonte