2012-02-08 37 views

Trả lời

0

Đây là mẹo làm việc cho tôi. Từ định danh múi giờ nào có thể được trích xuất và bạn có thể sử dụng id này cho múi giờ.

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 Đây là khung công tác riêng của Apple – thedeveloper3124

+0

Vâng, đây là khung công tác riêng của Apple, nhưng nếu bạn lấy nó từ khung gốc thì tốt nhất là sử dụng thư viện của bên thứ ba. –

+0

Khả năng xảy ra lỗi này trong bản cập nhật iOS rất có thể là – thedeveloper3124

1

Xem https://github.com/Alterplay/APTimeZones, nó sử dụng cơ sở dữ liệu cục bộ được xác định trước của Timezones.

+0

Nó hoạt động với tôi :) Vì vậy, +1 –

+0

Xin lưu ý: Vui lòng sử dụng sau khi đọc https://github.com/Alterplay/APTimeZones/issues/2 này –

2

Tôi đã sử dụng thư viện APTimeZones. Trong trường hợp của tôi, tôi cần múi giờ cũng như tên quốc gia từ vĩ độ dài của một thành phố cụ thể. Tôi đã đi qua thư viện để biết nó hoạt động như thế nào. Nó thực sự có một cơ sở dữ liệu ở định dạng JSON có tất cả các múi giờ cùng với thời gian chờ tương ứng của chúng. nó mất lat dài như đầu vào và vòng qua cơ sở dữ liệu của nó so sánh khoảng cách của tất cả các vĩ độ của múi giờ dài từ lat đầu vào dài. Nó trả về múi giờ có khoảng cách ngắn nhất từ ​​đầu vào lat dài. Tuy nhiên, vấn đề là vì một thành phố ở biên giới của một đất nước lớn, nó đã trả lại cho tôi múi giờ của nước láng giềng, vì tôi cũng trích xuất mã quốc gia từ nó, tôi có quốc gia láng giềng.

Vì vậy, khung gốc của Apple rất tốt trong trường hợp này.

Và mã bên dưới hoạt động tốt cho tôi.

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

Đây là giải pháp thanh lịch nhất mà không cần thư viện của bên thứ ba! Tôi không thể tin rằng có một tài sản timeZone trên một CLPlacemark :) – PostCodeism

+0

Có dude, Nó là giá trị một phần vì vậy tôi đã làm .. Happy coding :) – Roohul

Các vấn đề liên quan