【发布时间】:2011-02-04 16:55:19
【问题描述】:
我正在使用 .NET,我能够通过 IP 对用户城市进行地理定位。
有没有简单的方法让用户时区很长。和纬度。还是城市名?
不知道facebook是怎么做到的?
谢谢
【问题讨论】:
-
这可能会有所帮助:stackoverflow.com/questions/41504/…
标签: .net timezone geolocation
我正在使用 .NET,我能够通过 IP 对用户城市进行地理定位。
有没有简单的方法让用户时区很长。和纬度。还是城市名?
不知道facebook是怎么做到的?
谢谢
【问题讨论】:
标签: .net timezone geolocation
有一个 Web 服务可以用来按城市或经纬度获取时区:
【讨论】:
您可以从系统中获取时区列表并将其与城市名称进行比较:
http://msdn.microsoft.com/en-us/library/bb397781.aspx
这是脆弱的。
或者,您可以使用一些 Web 服务,将其传递 long/lat 并为您提供时区,但这意味着您被绑定到第三方 Web 服务。
【讨论】:
我确信这段代码可以简化,但这对我来说可以得到 TimeZone ID 和 Name。
Private Sub checkTZ()
Dim wc As WebClient = New WebClient()
Dim str As String = Nothing
Dim latPattern As String = "\bLatitude.*\<{1}"
Dim latRegSearch As Regex = New Regex(latPattern)
Dim lat As String = Nothing
Dim lonPattern As String = "\bLongitude.*\<{1}"
Dim lonRegSearch As Regex = New Regex(lonPattern)
Dim lon As String = Nothing
Try
str = wc.DownloadString("http://www.ipinfodb.com/my_ip_location.php")
lat = latRegSearch.Match(str).Value
lon = lonRegSearch.Match(str).Value
Catch ex As Exception
str = "Not Found"
End Try
Dim pattern As String = "\<|\s|\:|\bLatitude|\bLongitude"
Dim rgx As New Regex(pattern)
lat = rgx.Replace(lat, "")
lon = rgx.Replace(lon, "")
Dim firefoxEpochDate As Date = "1/1/1970"
Dim s_CurrentGoogleAPI As Long = DateDiff(DateInterval.Second, firefoxEpochDate, DateTime.UtcNow)
Dim xmldoc As XmlDocument = New XmlDocument()
Dim results2 As String = wc.DownloadString("https://maps.googleapis.com/maps/api/timezone/xml?location=" & lat & "," & lon & "×tamp=" & s_CurrentGoogleAPI)
xmldoc.LoadXml(results2)
Dim tz_offset_hours As Double = (Convert.ToDouble(xmldoc.DocumentElement.Item("raw_offset").InnerText) + Convert.ToDouble(xmldoc.DocumentElement.Item("dst_offset").InnerText)) / 3600
End Sub
【讨论】: