2012-02-08 16 views

Odpowiedz

0

Oto sztuczka, która sprawdziła się u mnie. Z którego można wyodrębnić identyfikator strefy czasowej i możesz użyć tego id dla strefy czasowej.

CLLocation *location = [[CLLocation alloc] initWithLatitude:latitude longitude:longitude]; 

[geoCoder reverseGeocodeLocation:location completionHandler:^(NSArray *placemarks, NSError *error) { 

    if (error == nil && [placemarks count] > 0) { 

     placeMark = [placemarks lastObject]; 
     NSRegularExpression *regex = [NSRegularExpression regularExpressionWithPattern:@"identifier = \"[a-z]*\\/[a-z]*_*[a-z]*\"" options:NSRegularExpressionCaseInsensitive error:NULL]; 
     NSTextCheckingResult *newSearchString = [regex firstMatchInString:[placeMark description] options:0 range:NSMakeRange(0, [placeMark.description length])]; 
     NSString *substr = [placeMark.description substringWithRange:newSearchString.range]; 
     NSLog(@"timezone id %@",substr); 

    }]; 
+1

FYI Jest to prywatny ramy Jabłko – thedeveloper3124

+0

Tak to jest prywatna ramy Apple, ale jeśli się go z natywnym ram to najlepiej, zamiast przy użyciu biblioteki strony trzeciej. –

+0

Szanse tym łamaniu w aktualizacji iOS jest bardzo prawdopodobne – thedeveloper3124

2

Użyłem biblioteki APTimeZones. W moim przypadku potrzebowałem strefy czasowej i nazwy kraju od długiego czasu określonego miasta. Poszedłem przez bibliotekę, aby dowiedzieć się, jak to działa. W rzeczywistości ma bazę danych w formacie JSON, która ma wszystkie strefy czasowe wraz z ich odpowiednimi długimi długimi. trwa to długo jako dane wejściowe i pętle w bazie danych, porównując odległości wszystkich stref czasowych od długiego czasu wprowadzania danych. Zwraca strefę czasową, która ma najkrótszą odległość od wejścia o długości długiej.

Ale problem dotyczył miasta znajdującego się na granicy dużego kraju, które zwróciło mi strefę czasową sąsiedniego kraju, ponieważ również wyciągnąłem z niej kod kraju, otrzymałem sąsiedni kraj.

Rdzeń firmy Apple jest w tym przypadku bardzo dobry.

A poniższy kod pracował dla mnie dobrze.

CLLocation *location = [[CLLocation alloc] initWithLatitude:your_latitude longitude:your_longitude]; 
CLGeocoder *geoCoder = [[CLGeocoder alloc]init]; 
[geoCoder reverseGeocodeLocation: location completionHandler:^(NSArray *placemarks, NSError *error) 
{ 
CLPlacemark *placemark = [placemarks objectAtIndex:0]; 
NSLog(@"Timezone -%@",placemark.timeZone); 

//And to get country name simply. 
NSLog(@"Country -%@",placemark.country); 

}]; 
+0

To najbardziej eleganckie rozwiązanie bez biblioteki innej firmy! Nie mogę uwierzyć, że istnieje właściwość time zone na CLPlacemark :) – PostCodeism

+0

Tak stary, to było warte akcji, więc zrobiłem ... Szczęśliwe kodowanie :) – Roohul