Odpowiedzi:
Wydaje mi się, że to selektor NSDate, którego szukasz:
- (NSTimeInterval)timeIntervalSince1970
Znacznik czasu systemu Unix to liczba sekund od 00:00:00 czasu UTC 1 stycznia 1970 r. Jest reprezentowany przez typ time_t , który jest zwykle 32-bitową liczbą całkowitą ze znakiem (long lub int).
iOS zapewnia - (NSTimeInterval) timeIntervalSince1970 dla obiektów które zwracają liczbę sekund od 00:00:00 GMT 1 stycznia 1970. NSTimeInterval jest typem podwójnej liczby zmiennoprzecinkowej, dzięki czemu uzyskujesz sekundy i ułamki sekundy.
Ponieważ oba mają to samo odniesienie (północ 1 stycznia 1970 UTC) i oba są podane w sekundach, konwersja jest łatwa, przekonwertuj NSTimeInterval na time_t, zaokrąglając lub skracając w zależności od potrzeb:
time_t unixTime = (time_t) [[NSDate date] timeIntervalSince1970];
int unixTime = floor([piece.piece_last_view timeIntervalSince1970])
gdzie piece.piece.last_view to
Możesz utworzyć uniksową datę znacznika czasu od daty w następujący sposób:
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;
}
UWAGA: - Znacznik czasu musi być w strefie UTC, więc konwertuję nasz czas lokalny na czas UTC.
Zaktualizowano dla Swift 3
// current date and time
let someDate = Date()
// time interval since 1970
let myTimeStamp = someDate.timeIntervalSince1970
Uwagi
timeIntervalSince1970
zwraca TimeInterval
, co jest aliasem typu dla Double
.
Jeśli chcesz pójść w drugą stronę, możesz wykonać następujące czynności:
let myDate = Date(timeIntervalSince1970: myTimeStamp)
Jeśli chcesz przechowywać ten czas w bazie danych lub wysłać go przez serwer ... najlepiej jest użyć uniksowych znaczników czasu. Oto mały fragment, aby to uzyskać:
+ (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]]
:? Proszę wyjaśnij trochę.
Zgodnie z sugestią @ kexik, używając funkcji czasu UNIX, jak poniżej:
time_t result = time(NULL);
NSLog([NSString stringWithFormat:@"The current Unix epoch time is %d",(int)result]);
.Jak z mojego doświadczenia - nie używaj timeIntervalS od 1970 roku, podaje znacznik czasu epoki - liczbę sekund, w których jesteś za GMT.
Kiedyś występował błąd z [[NSDate date] timeIntervalSince1970], dawał / odejmował czas na podstawie strefy czasowej telefonu, ale wydaje się, że został już rozwiązany.
[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]];
pierwszy unixtime 1532278070
drugi unixtime 1532278070.461380
trzeci unixtime 1532278070