2016-11-28 71 views
1

我想顯示本地系統日期時間格式在服務器上的日期,但它採取的服務器日期時間格式的本地系統日期時間格式。在localhost運行時運行良好,但在服務器運行時,格式爲MM/dd/yyyy(US格式),與系統日期時間格式無關。我已經嘗試過這些但沒有想要的結果C#:在服務器

string DateTimeFormat = System.Globalization.CultureInfo.CurrentCulture.DateTimeFormat.ShortDatePattern 

System.Threading.Thread threadForCulture = new System.Threading.Thread(delegate() { }); 
string DateTimeFormat = threadForCulture.CurrentCulture.DateTimeFormat.ShortDatePattern; 

有沒有其他方法可以實現這個目標?

+1

可以使用dt.ToString( 「DD/MM/YYYY」);這將日期對象(dt)轉換爲dd/MM/yyyy格式。 –

+0

@SouvikGhosh,我不想要特定的格式。它必須按照本地系統日期時間格式進行更改,並在本地格式更改時進行更改 – Sanjay

回答

0

嘛,你使用CurrentCulture和代碼運行在服務器上,所以能有什麼辦法。服務器不會奇怪地爲每個請求更改其環境設置。

如果你想以符合用戶瀏覽網站的首選語言,你有最好的賭注是Accept-Language頭。 This answer詳細說明如何將其轉換爲ASP.NET MVC中的CultureInfo。請注意,這仍然是一種有限的方法,因爲您僅限於服務器支持的內容和瀏覽器發送的內容。除了請求頭信息以外,服務器沒有別的辦法來確定用戶的偏好,而且請求頭不能真正編碼,我寧願使用ISO-8601日期格式的de-de。然後

最簡單的方法是挑基於請求頭一個合理的默認,並提供一個選項來改變它。即使在使用JavaScript的客戶端機器上,您也無法獲取最多的信息。網頁在遵守操作系統用戶偏好的程度上存在限制。所以一個簡單的退出方法是添加一個設置,以便每個人都可以改變它。

0

這是我對另一個線程的StackOverflow答案,這應該是你正在尋找的。

How to get current user timezone in c#

的關鍵是總是店DateTime是否在「UTC時區」的服務器上(即始終是SQL Server計算機上使用GetUTCDate()而非GetDate()),然後讓你的客戶通過哪個時區他們在。

然後,你只需要一些代碼結合這兩個。

(道歉不cut'n'pasting從我的其他文章響應的代碼,但它已經很好地描述了那裏。)