I'm using .NET and I'm able to geolocate user city by IP.
Is there easy way to get user timezone by long. and lat. or city name?
I wonder how facebook is doing it?
Thank You
I'm using .NET and I'm able to geolocate user city by IP.
Is there easy way to get user timezone by long. and lat. or city name?
I wonder how facebook is doing it?
Thank You
You can get a list of timezones from the system and compare it to the city name:
http://msdn.microsoft.com/en-us/library/bb397781.aspx
Which is fragile.
Alternatively there are a few web services out there you can use, passing it long/lat and it gives you timezone, but that means you're tethered to the third part web service.
There is a web service you can use to get the timezone by city or longitude and latitude:
I'm sure this code can be simplified, but this worked for me to get the TimeZone ID and 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