2012-06-06 14 views
7

Otrzymuję niektóre start_times i end_times z powrotem z żądania interfejsu API w postaci NSDecimalNumber.Konwersja znacznika czasu uniksowego na NSdate przy użyciu lokalnej strefy czasowej

Udało mi się przekonwertować te NSDecimalNumber s na s, ale kod nie uwzględnia stref czasowych.

Potrzebuję go do korzystania ze strefy czasowej, która jest domyślna na urządzeniu.

+0

Możliwy duplikat [konwersji czasu epoki na NSDate w kakao/iPhone'u] (http://stackoverflow.com/q/2609561/608157) –

+0

Innym możliwym duplikatem jest [Konwersja czasu epoki do NSDate z dobrą strefą czasową z Objective c] (http: //stackoverflow.com/q/6655446/608157) –

+1

There are ot jej również ... użyj pola wyszukiwania w prawym górnym rogu, zanim zadasz pytania. Jest to pierwszy temat na stronie ["Jak pytać"] (http://stackoverflow.com/questions/how-to-ask) –

Odpowiedz

28

ten powinien robić to, co trzeba z bieżącej lokalizacji

double unixTimeStamp =1304245000; 
NSTimeInterval _interval=unixTimeStamp; 
NSDate *date = [NSDate dateWithTimeIntervalSince1970:_interval]; 
NSDateFormatter *formatter= [[NSDateFormatter alloc] init]; 
[formatter setLocale:[NSLocale currentLocale]]; 
[formatter setDateFormat:@"dd.MM.yyyy"]; 
NSString *dateString = [formatter stringFromDate:date]; 
9

Unix czasu doesn't have a time zone. jest zdefiniowana w UTC jako liczba sekund od północy 1 stycznia 1970.

Powinieneś dostać NSDates w odpowiedniej strefy czasowej przy użyciu

[NSDate dateWithTimeIntervalSince1970:myEpochTimestamp]; 
+0

Witaj Davidzie, który z nich jest poprawny twój lub zaakceptowany? – Hemang

+0

Obie odpowiedzi robią to samo, jeśli chodzi o tworzenie obiektu daty. Reszta to tylko formatowanie. –

+0

Dziękuję za odpowiedź, ale ja tylko niepokoję się dla tej linii '[formatter setLocale: [NSLocale currentLocale]];' wyjście może się różnić? – Hemang

7

Spróbuj coś takiego ..

NSDate* sourceDate = ... // your NSDate 

NSTimeZone* sourceTimeZone = [NSTimeZone timeZoneWithAbbreviation:@"GMT"]; 
NSTimeZone* destinationTimeZone = [NSTimeZone systemTimeZone]; 

NSInteger sourceGMTOffset = [sourceTimeZone secondsFromGMTForDate:sourceDate]; 
NSInteger destinationGMTOffset = [destinationTimeZone secondsFromGMTForDate:sourceDate]; 
NSTimeInterval interval = destinationGMTOffset - sourceGMTOffset; 

NSDate* destinationDate = [[[NSDate alloc] initWithTimeInterval:interval sinceDate:sourceDate] autorelease]; 
Powiązane problemy