2015-06-12 52 views
3

我有一些來自SharePoint的日期時間值。 SharePoint以UTC格式存儲所有時間。因此,顯示用戶的時候,我UTC時間轉換爲使用此代碼的本地時區 -根據用戶的時區顯示UTC時間

internal static DateTime? ConvertTimeFromUtc(DateTime? utcTime) 
    { 
     if (utcTime.HasValue) 
     { 
      return TimeZoneInfo.ConvertTimeFromUtc(utcTime.Value, TimeZoneInfo.Local); 
     } 
     return null; 
    } 

難道我說得對,這將根據託管Web應用程序的服務器的時區返回的時間?
目前我們的生產服務器位於英國,用戶也位於英國。所以,上面的代碼將正常工作。

但是,未來,生產服務器甚至用戶可以在世界任何地方。我該怎麼做才能使它在未來的增強中無錯誤?
我是否需要使用JavaScript來查找當前用戶的時區,在會話中保存該信息,然後在顯示任何日期時間值時使用此信息?

謝謝!

+0

我會推薦你​​上次寫的觀點,對我來說這是最合乎邏輯的事情。 UTC工作無處不在,您只需調整客戶機上的顯示。 –

+0

用戶是否已通過身份驗證?如果是這樣,您可以在嚮應用程序註冊時存儲他們的時區,然後使用它將時間轉換爲適當的區域 –

回答

0

TimeZoneInfo類可用於管理您的時區需求。

假設您可以在客戶端獲取與TimeZoneInfo使用的Id值相對應的字符串(反過來,這些值直接來自Windows註冊表,但旨在匹配時區的標準化英文名稱),那麼您可以使用TimeZoneInfo.FindSystemTimeZoneById來查找正確的對象,並使用例如將ConvertTimeFromUtc方法轉換爲本地時間進行顯示。

我還沒有使用它,但也有Noda Time庫來處理您的所有日期/時間管理需求。一個類似的JavaScript庫是Moment.js,如果(看起來)你有一個JavaScript客戶端並且想要處理客戶端代碼中的本地時間,這可能會很有用。

我對JavaScript不熟悉,但我認爲它有一些內置的時區支持,當然至少有一個庫可以這樣做。

如果是我,我會盡力處理全部的本地時區問題客戶端。即你的服務器端代碼不應該關心本地時區。最多時,如果您希望用戶能夠覆蓋其工作站上的本地時區,則可以存儲該設置並稍後將其傳回給客戶端。但客戶端代碼應該轉換爲本地時間(或用戶選擇的「本地」時區)。

相關問題