3

我正在开发一个 iPhone 应用程序,我想在其中找到任何地方的纬度、经度和时区详细信息。

我怎样才能一次获得所有这些细节。

我们可以很容易地找到纬度和经度,但是我们怎样才能得到那个地方的确切时区呢?

有人可以指导我吗?

谢谢。

4

7 回答 7

3

看起来你想要这个:-

NSString *timeZoneName = [[NSTimeZone localTimeZone] name];

这对我来说是回报"Asia/Kolkata"

如果您正在使用,systemTimeZone那么它代表系统(设备)本身使用的时区。localTimeZone返回一个表示应用程序当前默认时区的对象。

使用此 API 获取数据并传递 lat 和 long 值。

获取 timeZone 的 API

于 2013-05-13T06:53:07.690 回答
1

从 CLLocation 获取 NSTimeZone:https ://github.com/Alterplay/APTimeZones此实用程序在没有 3d 派对服务的设备上本地工作。

于 2013-10-23T14:20:36.583 回答
1

您可以使用 CoreLocation 获取经度和纬度。

将此添加到您想要纬度和经度的 .h 类中。

#import <UIKit/UIKit.h>
#import <CoreLocation/CoreLocation.h>

@interface CoreLocationViewController : UIViewController <CLLocationManagerDelegate> {
    CLLocationManager *locationManager;
}
@property (retain, nonatomic) CLLocationManager *locationManager;
@end

在你的 .m 文件中

#import "CoreLocationViewController.h"

@implementation CoreLocationViewController
@synthesize locationManager; 

- (void)viewDidLoad
{
    [super viewDidLoad];
    // Do any additional setup after loading the view from its nib.

    [self setLocationManager:[[CLLocationManager alloc] init]];
    [locationManager setDelegate:self];
    [locationManager setDistanceFilter:kCLDistanceFilterNone]; 
    [locationManager setDesiredAccuracy:kCLLocationAccuracyHundredMeters];
    [locationManager startUpdatingLocation];
}

- (void)locationManager:(CLLocationManager *)manager 
    didUpdateToLocation:(CLLocation *)newLocation fromLocation:(CLLocation *)oldLocation {

 NSLog(@"My Latitude %f",newLocation.coordinate.latitude);
 NSLog(@"My Latitude %f",newLocation.coordinate.longitude);

}

对于当前的时区,您可以使用

NSTimeZone* currentTimeZone = [NSTimeZone systemTimeZone];
NSDateFormatter *dateFormatter = [dateFormat setTimeZone:currentTimeZone];
NSDate *rightNow = [NSDate date];
NSString *dateString = [dateFormatter  stringFromDate:rightNow];
于 2013-05-13T06:54:19.083 回答
0

您可以通过使用从任何设备获取时区

NSTimeZone* destinationTimeZone = [NSTimeZone systemTimeZone];

于 2013-05-13T06:36:39.337 回答
0

如果你想知道在这种情况下使用 api,你可以使用这个 api,但在这个 api 中,你首先使用CLLocationManager类找到你的纬度和经度,然后放入这个 api。

http://ws.geonames.org/timezone?lat=# {lat}&lng=#{lng}

并阅读谷歌文档以获取更多 API .....

https://developers.google.com/maps/documentation/timezone/

我希望它可以帮助你

于 2013-05-13T06:44:07.597 回答
0

您从 CLLocationManager 获取位置,您还可以查看Geonames.org

这是一项免费的网络服务,可让您从 long/lat 获取大量信息

他们还为 GeoNames Webservices 库提供免费(和开源)Java 客户端(还提供了其他语言的库:ruby、python、perl、lisp...)

以下是您可以从 long/lat 获得的一些信息:(此处为 web 服务的完整列表)

查找最近的地址

查找最近的十字路口

查找附近的街道

海拔时区

于 2013-05-13T06:39:48.613 回答
0

iOS 5 添加了 CLGeocoder 类,它可以进行你想要的查找。它以异步方式运行(我假设它正在查询某处的服务器),但是您给它一个位置,它会为您提供大量信息,包括时区。这个问题是针对 Objective C 提出的,但我将使用 Swift 来回答。由于 API 相同,Objective C 版本应该很容易派生。

这是在英国查找位置的 Swift Playground 片段:

import CoreLocation

let location = CLLocation(latitude: 51, longitude: -0.1)
let geocoder = CLGeocoder()
geocoder.reverseGeocodeLocation(location) { (placemarks, error) in
    if let error = error {
        print(error.localizedDescription)
        return
    }
    
    if let placemarks = placemarks {
        for placemark in placemarks {
            print(placemark.name ?? "no name")
            print(placemark.locality ?? "no city")
            print(placemark.administrativeArea ?? "no state/province")
            print(placemark.country ?? "no country")
            print(placemark.timeZone?.abbreviation() ?? "no time zone")
        }
    }
}

这是输出:

1234 A Street Address
Haywards Heath
England
United Kingdom
GMT+1

我故意更改了上面输出中的地址行,以便垃圾邮件机器人不会抓取它并开始征求我任意选择坐标的可怜的灵魂。

于 2020-07-11T16:22:22.243 回答