Respostas:
Acredito que este é o seletor do NSDate que você está procurando:
- (NSTimeInterval)timeIntervalSince1970
Um registro de data e hora do Unix é o número de segundos desde 00:00:00 UTC de 1º de janeiro de 1970. É representado pelo tipo time_t , que geralmente é um tipo inteiro de 32 bits assinado (long ou int).
O iOS fornece - (NSTimeInterval) timeIntervalSince1970 para objetos NSDate que retornam o número de segundos desde 00:00:00 GMT de 1º de janeiro de 1970. NSTimeInterval é um tipo de ponto flutuante duplo para que você obtenha os segundos e frações de segundo.
Como ambos têm a mesma referência (meia-noite 1Jan1970 UTC) e são ambos em segundos, a conversão é fácil, converta o NSTimeInterval em um time_t, arredondando ou truncando, dependendo de suas necessidades:
time_t unixTime = (time_t) [[NSDate date] timeIntervalSince1970];
int unixTime = floor([piece.piece_last_view timeIntervalSince1970])
onde piece.piece.last_view é um NSDate
Você pode criar uma data de data e hora unix a partir de uma data da seguinte maneira:
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;
}
OBSERVAÇÃO: - O carimbo de data e hora deve estar na zona UTC; portanto, converto nosso horário local em horário UTC.
Atualizado para o Swift 3
// current date and time
let someDate = Date()
// time interval since 1970
let myTimeStamp = someDate.timeIntervalSince1970
Notas
timeIntervalSince1970
retorna TimeInterval
, que é uma tipealias para Double
.
Se você quisesse seguir o outro caminho, poderia fazer o seguinte:
let myDate = Date(timeIntervalSince1970: myTimeStamp)
Se você deseja armazenar esse tempo em um banco de dados ou enviá-lo pelo servidor ... o melhor é usar os carimbos de data e hora do Unix. Aqui está um pequeno trecho para obter isso:
+ (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 pouco.
Conforme sugestão do @ kexik, usando a função de horário UNIX, conforme abaixo:
time_t result = time(NULL);
NSLog([NSString stringWithFormat:@"The current Unix epoch time is %d",(int)result]);
. Conforme minha experiência - não use timeIntervalSince1970, ele fornece o carimbo de data / hora da época - número de segundos em que você está atrás do GMT.
Costumava haver um bug com [[NSDate date] timeIntervalSince1970], que costumava adicionar / subtrair horas com base no fuso horário do telefone, mas parece estar resolvido agora.
[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]];
primeiro unixtime 1532278070
segundo tempo unix 1532278070.461380
terceiro tempo unixtime 1532278070