Как определить часовой пояс по долготе и широте в iOS - PullRequest
9 голосов
/ 08 февраля 2012

Как я могу узнать, в какую NSTimeZone попадают данные долгота и широта?

Ответы [ 3 ]

7 голосов
/ 20 июня 2016

Я пробовал APTimeZones библиотеку.В моем случае мне понадобился часовой пояс, а также название страны из латинского конкретного города.Я прошел библиотеку, чтобы узнать, как она работает.На самом деле в нем есть файл в формате JSON, в котором есть все часовые пояса и соответствующие им значения долготы.он принимает значение lat long в качестве входных данных и проходит через этот JSON-файл, сравнивая расстояния всех значений long в часовом поясе от входного значения lat long.Он возвращает часовой пояс, который имеет наименьшее расстояние от входного лат длинного.

Но проблема была для города на границе большой страны, он вернул мне часовой пояс соседней страны, так как я также извлекКод страны оттуда, я получил соседнюю страну.

Так что родная платформа Apple в этом случае очень хороша.

И приведенный ниже код работал для меня хорошо.

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);

}];

In Swift

let location = CLLocation(latitude: your_latitude, longitude: your_longitude)
let geoCoder = CLGeocoder()
geoCoder.reverseGeocodeLocation(location) { (placemarks, err) in
     if let placemark = placemarks?[0] {
          print(placemark.timeZone)
          print(placemark.country)
     }
}
1 голос
/ 01 июля 2015

См. https://github.com/Alterplay/APTimeZones, используется предопределенная локальная база данных часовых поясов.

0 голосов
/ 21 ноября 2014

Вот трюк, который работал для меня.Из какого часового пояса можно извлечь идентификатор, и вы можете использовать этот идентификатор для часового пояса.

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); 

    }];
...