Respuestas:
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 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:
time_t unixTime = (time_t) [[NSDate date] timeIntervalSince1970];
int unixTime = floor([piece.piece_last_view timeIntervalSince1970])
donde piece.piece.last_view es un NSDate
Puede crear una fecha de marca de tiempo de Unix a partir de una fecha de esta manera:
NSTimeInterval 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 que convierto nuestra hora local en hora UTC.
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 typealias para Double
.
Si quisieras ir hacia otro lado, podrías hacer lo siguiente:
let myDate = Date(timeIntervalSince1970: myTimeStamp)
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:
+ (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];
}
[[NSTimeZone systemTimeZone] secondsFromGMT]]
:? Por favor explique poco.
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, 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.
[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