2012-05-08 110 views
2

我想在ASP.Net MVC應用程序中使用客戶端時區名稱(例如印度標準時間)。如何在ASP.Net MVC應用程序中獲取客戶端TimeZone

所以,我可以使用TimeZoneInfo.FindSystemTimeZoneById(TimeZoneName)函數。

我試圖與new Date().getTimezoneOffset()reference

但是,有一個與夏令時的問題本準則。

在JavaScript中,我也試圖與new Date().toString()

但是,這給結果在不同的瀏覽器不同的格式。

在火狐,Chrome &野生動物園, 答案是 「2012星期二5月8日14:00:00 GMT + 0530(印度標準時間)」

在IE8,它是「週二5月8日14:00: 00 UTC + 0530 2012「

與歌劇同樣的問題也。

所以,這種方法不適用於IE & Opera。

什麼是識別客戶端時區的最佳方式?

回答

3

最好,使用最多的方法是確定客戶位置將向您介紹一些第三方庫和數據庫利用客戶端的IP ..然後基於客戶端的位置決定的時區

3

你需要要知道時區或只是UTC的偏移量?由於時區不是ISO標準,可以幾乎任意改變,所以我更願意使用客戶端的UTC偏移量,並且我總是在登錄時或客戶端提交需要客戶端時間的表單時從客戶端獲得。有時我會計算客戶端的GTM偏移量,並堅持使用它來顯示或使用任何時間。

所以我有一個全局JavaScript函數這樣它會返回給定的本地日期作爲通用字符串:

function aspClientDateTime(dateObject) { 
    return dateObject.getFullYear() + '-' 
     + this.leadingZero((dateObject.getMonth() + 1), 2) + '-' 
     + this.leadingZero(dateObject.getDate(), 2) + ' ' 
     + this.leadingZero(dateObject.getHours(), 2) + ':' 
     + this.leadingZero(dateObject.getMinutes(), 2) + ':' 
     + this.leadingZero(dateObject.getSeconds(), 2); 
    } 

在表單提交,我得到的當前客戶端的日期和它存儲形式:

myForm.clientTime.val(aspClientDateTime(new Date())); 

然後你知道它在瀏覽器中的時間,並且你可以計算出服務器上的UTC偏移等。

時區的問題在於,任何政府都可能在明天推出新的政策,就像薩摩亞最近所做的那樣。通常我想知道用戶的偏移是什麼,而不是他們在什麼時區。

如果是真正需要的後者,您可能需要問問他們,就像Skype一樣。

+0

我不想客戶端時間,我想客戶端時區。 由於夏令時間的原因,TimeOffset不適合我前面提到的。 – Harsh

+0

我說的是時區不可靠。如果你按照Jon Nylander建議的圖書館的鏈接,它會這樣說: 「如果你正在尋找歷史相關的和/或地理上精確的時區,那麼jsTimezoneDetect不適合你 這個腳本不會做地理定位。只需在幾個相同的時區(現代時間)中選擇人口最稠密的時區 例如,無法區分中歐的不同時區,無論您居住在中歐時區的哪個位置,該腳本都會返回歐洲/柏林「。 –

+0

現在,您可以通過捕獲客戶端時間並使用C#TimeZoneInfo類選擇與客戶端時間偏移相匹配的時區來完成該腳本所做的工作,但您仍在猜測。這就是爲什麼我說,如果你需要明確地知道他們的時區,你應該問他們。如果有人想出更好的解決方案,我會感興趣。 –

0

有一個通過JavaScript檢測時區的庫。它會給你一個足夠好的時區名稱。它不會進行地理定位或ip查找,因此速度非常快,但它不是非常精確。例如,它會爲中歐時區的任何人返回「歐洲/柏林」。但是,它應該足夠用於服務器端日期時間規範化。

https://bitbucket.org/pellepim/jstimezonedetect

+0

這並不完全有用,對於印度和斯里蘭卡,它將顯示「亞洲/加爾各答」,但我想要兩個不同的結果 – Harsh

+0

這取決於你想解決什麼問題。如果你想跨時區進行日期時間計算,這非常有用。由於斯里蘭卡和印度有相同的時區。如果您正在尋找更加地理上精確的時區標識符,您將需要使用地理位置和/或IP查找,這兩者都不是完全可靠的。 –

相關問題