ios - Cómo convertir NSDate en unix timestamp iphone sdk?
unix-timestamp (9)
Rápido
Actualizado para Swift 3
// current date and time
let someDate = Date()
// time interval since 1970
let myTimeStamp = someDate.timeIntervalSince1970
Notas
-
timeIntervalSince1970
devuelveTimeInterval
, que es un tipo de alias paraDouble
. Si quisiera ir por el otro lado, podría hacer lo siguiente:
let myDate = Date(timeIntervalSince1970: myTimeStamp)
¿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
Mi forma preferida es simplemente:
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];
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 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];
}
Si necesita marca de tiempo como una cadena.
time_t result = time(NULL);
NSString *timeStampString = [@(result) stringValue];
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];
- (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.