¿Cómo convertir una NSDate
marca de tiempo en Unix? He leído muchas publicaciones que hacen lo contrario. Pero no encuentro nada relacionado con mi pregunta.
ios
iphone
nsdate
unix-timestamp
neha
fuente
fuente
Una marca de tiempo Unix es el número de segundos desde las 00:00:00 UTC del 1 de enero de 1970. Está representada por el tipo time_t , que generalmente es un tipo entero de 32 bits con signo (largo o int).
iOS proporciona - (NSTimeInterval) timeIntervalSince1970 para objetos NSDate que devuelve el número de segundos desde las 00:00:00 GMT del 1 de enero de 1970. NSTimeInterval es un tipo de coma flotante doble para que obtenga los segundos y fracciones de segundo.
Dado que ambos tienen la misma referencia (medianoche 1 de enero de 1970 UTC) y ambos están en segundos, la conversión es fácil, convierta el NSTimeInterval a time_t, redondeando o truncando según sus necesidades:
fuente
int unixTime = floor([piece.piece_last_view timeIntervalSince1970])
donde piece.piece.last_view es un NSDatePuede crear una fecha de marca de tiempo de Unix a partir de una fecha de esta manera:
fuente
NOTA: - La marca de tiempo debe estar en la zona UTC, por lo que convierto nuestra hora local en hora UTC.
fuente
Rápido
Actualizado para Swift 3
Notas
timeIntervalSince1970
devuelveTimeInterval
, que es un typealias paraDouble
.Si quisieras ir hacia otro lado, podrías hacer lo siguiente:
fuente
Si desea almacenar este tiempo en una base de datos o enviarlo a través del servidor ... lo mejor es usar marcas de tiempo Unix. Aquí hay un pequeño fragmento para obtener eso:
fuente
[[NSTimeZone systemTimeZone] secondsFromGMT]]
:? Por favor explique poco.Mi forma preferida es simplemente:
fuente
Según la sugerencia de @ kexik usando la función de tiempo UNIX como se muestra a continuación:
Según mi experiencia, no use timeIntervalSince1970, da la marca de tiempo de la época, la cantidad de segundos que está detrás de GMT.Solía haber un error con [[NSDate date] timeIntervalSince1970], solía sumar / restar tiempo en función de la zona horaria del teléfono, pero parece estar resuelto ahora.
fuente
primer unixtime 1532278070
segundo unixtime 1532278070.461380
tercer unixtime 1532278070
fuente
Si necesita una marca de tiempo como una cadena.
fuente