通过城市或经纬度获取.NET时区

4

我正在使用.NET,通过IP可以获取用户所在城市。

是否有一种简单的方法通过经度和纬度或城市名称来获取用户时区?

我想知道Facebook是如何做到的?

谢谢


这可能会有所帮助:https://dev59.com/d3VD5IYBdhLWcg3wQJKT - R. Martinho Fernandes
3个回答

0

你可以从系统获取一个时区列表,并将其与城市名称进行比较:

http://msdn.microsoft.com/en-us/library/bb397781.aspx

哪一个是脆弱的。

或者,你可以使用一些网络服务,传递经纬度信息,它会给你返回时区,但这意味着你要依赖于第三方网络服务。


如果你想运行自己的服务而不是依赖于网络服务,你可以尝试使用http://askgeo.com。该网站销售一个Java库,可以根据给定的纬度/经度提供时区ID。 - James D

0

1
在我看来,那并不是一个完整的时区。它只是相对于UTC的当前偏移量 - 这意味着您不知道何时会更改夏令时等。很遗憾它没有给出一个奥尔森名字。 - Jon Skeet
是的,但响应中包括本地时间(如果夏令时生效,则考虑夏令时),UTC时间以及是否使用夏令时 - 对许多目的来说可能足够了。例如:http://www.earthtools.org/timezone-1.1/57.09/02.05 - Cocowalla
1
这并没有考虑欧洲以外的夏令时,因此基本上毫无用处。 - James D

0

我相信这段代码可以被简化,但是它对我来说可以获得时区的ID和名称。

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 & "&timestamp=" & 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

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接