Cómo convertir NSDate en unix timestamp iphone sdk?

¿Cómo convertir un NSDate en la marca de tiempo de Unix? He leído muchas publicaciones que hacen lo contrario. Pero no encuentro nada relacionado con mi pregunta.

Creo que este es el selector de NSDate que estás buscando:

 - (NSTimeInterval)timeIntervalSince1970 

Una marca de tiempo Unix es el número de segundos desde 00:00:00 UTC del 1 de enero de 1970. Se representa 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 00:00:00 GMT del 1 de enero de 1970. NSTimeInterval es un tipo de coma doble flotante, por lo que se obtienen los segundos y fracciones de segundo.

Dado que ambos tienen la misma referencia (medianoche 1Jan1970 UTC) y ambos en segundos la conversión es fácil, convierta NSTimeInterval a time_t, redondeando o truncando según sus necesidades:

 time_t unixTime = (time_t) [[NSDate date] timeIntervalSince1970]; 

Puede crear una fecha de marca de tiempo de unix a partir de una fecha de esta manera:

 int timestamp = [[NSDate date] timeIntervalSince1970]; 
 - (void)GetCurrentTimeStamp { NSDateFormatter *objDateformat = [[NSDateFormatter alloc] init]; [objDateformat setDateFormat:@"yyyy-MM-dd"]; NSString *strTime = [objDateformat stringFromDate:[NSDate date]]; NSString *strUTCTime = [self GetUTCDateTimeFromLocalTime:strTime];//You can pass your date but be carefull about your date format of NSDateFormatter. NSDate *objUTCDate = [objDateformat dateFromString:strUTCTime]; long long milliseconds = (long long)([objUTCDate timeIntervalSince1970] * 1000.0); NSString *strTimeStamp = [Nsstring stringwithformat:@"%lld",milliseconds]; NSLog(@"The Timestamp is = %@",strTimestamp); } - (NSString *) GetUTCDateTimeFromLocalTime:(NSString *)IN_strLocalTime { NSDateFormatter *dateFormatter = [[NSDateFormatter alloc] init]; [dateFormatter setDateFormat:@"yyyy-MM-dd"]; NSDate *objDate = [dateFormatter dateFromString:IN_strLocalTime]; [dateFormatter setTimeZone:[NSTimeZone timeZoneWithAbbreviation:@"UTC"]]; NSString *strDateTime = [dateFormatter stringFromDate:objDate]; return strDateTime; } 

NOTA: – La marca de tiempo debe estar en la zona UTC, por lo tanto, convierto nuestra hora local a hora UTC.

Rápido

Actualizado para Swift 3

 // current date and time let someDate = Date() // time interval since 1970 let myTimeStamp = someDate.timeIntervalSince1970 

Notas

  • timeIntervalSince1970 devuelve TimeInterval , que es un tipo de alias para Double .
  • Si quisiera ir por el otro lado, podría hacer lo siguiente:

     let myDate = Date(timeIntervalSince1970: myTimeStamp) 

Si desea almacenar estos tiempos en una base de datos o enviarlos a través del servidor … lo mejor es usar marcas de tiempo Unix. Aquí hay un pequeño fragmento para obtener eso:

 + (NSTimeInterval)getUTCFormateDate{ NSDateComponents *comps = [[NSCalendar currentCalendar] components:NSDayCalendarUnit | NSYearCalendarUnit | NSMonthCalendarUnit fromDate:[NSDate date]]; [comps setHour:0]; [comps setMinute:0]; [comps setSecond:[[NSTimeZone systemTimeZone] secondsFromGMT]]; return [[[NSCalendar currentCalendar] dateFromComponents:comps] timeIntervalSince1970]; } 

Mi forma preferida es simplemente:

 NSDate.date.timeIntervalSince1970; 

Según la sugerencia de @ kexik usando la función de tiempo UNIX como se muestra a continuación:

  time_t result = time(NULL); NSLog([NSString stringWithFormat:@"The current Unix epoch time is %d",(int)result]); 

. Según mi experiencia, no use timeIntervalSince1970, indica la fecha y hora de la época: la cantidad de segundos que está detrás de GMT.

Solía ​​haber un error con [[NSDate date] timeIntervalSince1970], solía agregar / restar el tiempo en función de la zona horaria del teléfono, pero parece estar resuelto ahora.

Si necesita marca de tiempo como una cadena.

 time_t result = time(NULL); NSString *timeStampString = [@(result) stringValue]; 
  [NSString stringWithFormat: @"first unixtime is %ld",message,(long)[[NSDate date] timeIntervalSince1970]]; [NSString stringWithFormat: @"second unixtime is %ld",message,[[NSDate date] timeIntervalSince1970]]; [NSString stringWithFormat: @"third unixtime is %.0f",message,[[NSDate date] timeIntervalSince1970]]; 

primer unixtime 1532278070

segundo unixtime 1532278070.461380

tercer unixtime 1532278070