Jak mogę się dowiedzieć, który NSTimeZone ma podaną długość i szerokość geograficzną?Jak zidentyfikować strefę czasową z długości i szerokości geograficznej w iOS
Odpowiedz
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);
}];
Zobacz https://github.com/Alterplay/APTimeZones, używa predefiniowanego lokalnej bazy danych stref czasowych.
on pracował dla mnie :) Więc +1 –
Uwaga: Proszę używać po przeczytaniu tego https://github.com/Alterplay/APTimeZones/issues/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);
}];
To najbardziej eleganckie rozwiązanie bez biblioteki innej firmy! Nie mogę uwierzyć, że istnieje właściwość time zone na CLPlacemark :) – PostCodeism
Tak stary, to było warte akcji, więc zrobiłem ... Szczęśliwe kodowanie :) – Roohul
FYI Jest to prywatny ramy Jabłko – thedeveloper3124
Tak to jest prywatna ramy Apple, ale jeśli się go z natywnym ram to najlepiej, zamiast przy użyciu biblioteki strony trzeciej. –
Szanse tym łamaniu w aktualizacji iOS jest bardzo prawdopodobne – thedeveloper3124