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.Cómo convertir NSDate en unix timestamp iphone sdk?
Respuesta
Creo que este es el selector del NSDate que estás buscando:
- (NSTimeInterval)timeIntervalSince1970
Un Unix timestamp es el número de segundos transcurridos desde las 00:00:00 GMT 1 de enero de 1970. Está representado por el tipo time_t, que suele ser 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 flotante doble para obtener los segundos y fracciones de segundo.
Dado que ambos tienen la misma referencia (medianoche 1Jan1970 UTC) y son a la vez en cuestión de segundos la conversión es fácil, convertir el NSTimeInterval a un time_t, redondeo o truncamiento en función de sus necesidades:
time_t unixTime = (time_t) [[NSDate date] timeIntervalSince1970];
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. He aquí un pequeño fragmento de conseguir que:
+ (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];
}
¿Por qué está configurando la hora y el minuto en 0 en los componentes? Además, ¿cómo le dará el UTC exacto basado en esto: '[[NSTimeZone systemTimeZone] secondsFromGMT]]'? Por favor explica poco. – Hemang
Hola amigo me ayudó –
Se puede crear una fecha de marca de tiempo Unix de una fecha de la siguiente manera:
int timestamp = [[NSDate date] timeIntervalSince1970];
Esto está mal, timeIntervalSince1970 devuelve un TimeInterval que en realidad es un doble. –
Mi forma preferida es simplemente:
NSDate.date.timeIntervalSince1970;
Según Sugerencia de @ kexik utilizando la función de tiempo UNIX de la siguiente manera:
time_t result = time(NULL);
NSLog([NSString stringWithFormat:@"The current Unix epoch time is %d",(int)result]);
. Según mi experiencia, no use timeIntervalSince1970, le da la marca de tiempo de é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.
Estoy corrigiendo mi respuesta, realmente parece ser igual. Aunque el tiempo (NULL) puede ser un poco más rápido ya que no está llamando a obj-c runtime. : P Código de prueba NSLog (@ "time (NULL) =% d; timeIntervalSince1970 =% d", (int) time (NULL), (int) [[NSDate date] timeIntervalSince1970]); – k3a
He enfrentado problemas con [[NSDate date] timeIntervalSince1970]. Ellos parecen considerar la región en la que te encuentras también. –
Sí, esto es lo que creo que experimenté ese día, pero en iOS7 Simulator y iOS6 con GMT + 2 zona horaria ahora parecen iguales ... De todos modos, el tiempo (NULL) funciona siempre :) – k3a
- (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 UTC, así que convertir nuestra Hora local a la hora UTC.
Swift
Actualizado para la Swift 3
// current date and time
let someDate = Date()
// time interval since 1970
let myTimeStamp = someDate.timeIntervalSince1970
Notas
timeIntervalSince1970
vuelveTimeInterval
, que es un typealias paraDouble
.Si quería ir a otro lado que podría hacer lo siguiente:
let myDate = Date(timeIntervalSince1970: myTimeStamp)
Si necesita sello de tiempo como una cadena.
time_t result = time(NULL);
NSString *timeStampString = [@(result) stringValue];
- 1. iPhone SDK NSString A NSDate
- 2. MySQL convertir datetime a Unix timestamp
- 3. ¿Cómo convertir NSDate en sello de tiempo Unix en Objective C/iPhone?
- 4. Cómo obtener NSDate actual para el simulador Fecha? iPhone Sdk
- 5. django Datefield para Unix timestamp
- 6. Mysql Unix-Timestamp Formato de fecha
- 7. iPhone SDK Objective-C __DATE__ (fecha de compilación) no se puede convertir a NSDate
- 8. convertir el tiempo de epoch a NSDate en cocoa/iPhone
- 9. Cómo convertir datetime() en timestamp() en erlang
- 10. iPhone SDK: Convertir MKMapPoint a CGPoint
- 11. NSDate - Convertir fecha a GMT
- 12. Convertir a UTC Timestamp
- 13. Cómo convertir NSData a CGDataProviderRef en iphone sdk?
- 14. Cómo convertir NSDate a NSString?
- 15. Convertir NSDate a NSString
- 16. ¿Cómo convertir un NSString en NSDate?
- 17. iPhone: NSDate convertir GMT a la hora local
- 18. ¿Convertir una descripción de NSDate en un NSDate?
- 19. Convertir milisegundos a NSDate
- 20. Tipo de campo PostgreSQL para timestamp unix?
- 21. tipo de campo para timestamp unix
- 22. Java: convertir largo a Timestamp
- 23. Script de Bash para convertir una columna de fecha y hora en unix timestamp en .csv
- 24. Convertir VARCHAR2 en TIMESTAMP en Oracle
- 25. String to timestamp en mysql
- 26. Cómo convertir cadena a entero en UNIX
- 27. ¿cómo puedo agregar un minuto en NSDate de iphone actual y guardarlo en NSDate?
- 28. fecha Analizar ISO8601 en Objective-C (iPhone OS SDK)
- 29. Número aleatorio en iphone sdk?
- 30. Cómo configurar uitableviewclick en el iphone sdk
¿Este devolver una marca de tiempo Unix Si provisto de un NSDate? – neha
Sí, esto es exactamente lo que estás buscando. UNIX mide el tiempo en segundos desde enero de 1970, y este método devuelve el intervalo entre el receptor (el NSDate proporcionado) y el primer instante del 1 de enero de 1970, GMT. NSTimeInterval es en realidad un typedef de doble. – BAndonovski
Para completar, para convertir una marca de tiempo Unix en NSDate, haga '[NSDate dateWithTimeIntervalSince1970: yourTimestampAsDouble]' – pixelfreak