2011-11-02 231 views
9

我正在開發一個在C#/ .NET平臺上發送應用程序的通訊。我最近添加了模塊,通過使用maxmind.com數據庫的IP地址檢索收件人的國家和地區。按國家和地區獲取時區

例如,我可以得到一些樣本IP地址以下信息:

Country Code: DE 
Country Name: Germany 
Region Name: Hessen 
City:   Frankfurt Am Main 
Latitude:  50.1167 
Longitude: 8.6833 

我現在需要的是使用該信息來獲得用戶的時區。

我知道有一些GeoIp數據庫也提供了時區,但我需要使用這個具體的GeoIp數據庫。此外,JavaScript的方法來確定時間偏移量不能在這裏使用。

可能我可以通過國家和地區名稱獲取時區嗎?

+0

您可以使用任何[這些方法]經緯度(http://stackoverflow.com/a/16086964/634824) –

回答

9

最後,長期的研究後,我已經找到了解決辦法。它可能不太準確,但它不需要遠程服務的依賴。

我發現的MaxMind的數據庫提供了從奧爾森數據庫地區和時區之間的映射文件(又名TZ數據庫):http://www.maxmind.com/timezone.txt

第二步是奧爾森時區轉換成在.NET中的時區。在這裏找到最合適的解決方案:http://www.timdavis.com.au/data/olson-time-zone-database-to-standard-windows-time-zone-v01/ 所以我編輯了一下,並將其轉換爲CSV文件從.NET中讀取。

希望它能幫助別人。

+1

請記住接受你的答案,因爲它[可以回答你自己的問題](http://blog.stackoverflow.com/2011/07/its-ok-to-ask-and-answer-your-own-questions/ )。 –

2
+0

謝謝。有趣的服務。我會嘗試尋找一些基於離線的方法,因爲我們未來可以擁有超過1M個收件人,但這種解決方案對我的情況非常有用 – VirusX

+0

@VirusX - 如果您談論數百萬個請求,您將很難找到免費服務。當然,Javascript會是免費的,你可以通過很多方式來做到這一點,包括簡單地使用HTTP請求到你的控制下的JavaScript頁面上。 –

+0

@Ramhound - 正如我上面提到的那樣,由於請求的性質,JavaScript不能在這裏使用。信標網址包含在'img'標籤的'src'參數中。當用戶打開電子郵件時,請求將發送給我們的服務。我們所有的都是http頭和收件人的IP地址。關於數百萬 - 通常它不意味着每分鐘或每小時的數百萬次請求,但它絕對可以超過每秒幾次請求。所以,正如我所說,我試圖找到一些離線數據庫來做到這一點。 – VirusX

1

這已經有一段時間,因爲這個問題被問過,但可能幫助別人..

當您使用DatabaseReader對象從的MaxMind API在那裏早已屬性location.timeZone您可以通過返回的對象檢索GeoIP Class,請查看maxmind的API docs

+0

是的,2011年GeoIP2不存在。現在有一個簡單的API。 – VirusX

相關問題