2017-02-27 60 views
0

我在數據庫中使用UTC的日期,並且我的用戶時區在他們的偏好表中。將UTC日期時間顯示到用戶定義的時區

我有一個擴展方法,從UTC轉換到用戶的時間:

public static DateTime ToClientTime(this DateTime dt) 
{ 
    TimeZoneInfo cstZone = TimeZoneInfo.FindSystemTimeZoneById("SA Pacific Standard Time"); //Hardcoded timezone 
    return TimeZoneInfo.ConvertTimeFromUtc(dt, cstZone); 
} 

正如你可以在下面的代碼中看到,現在它有一個硬編碼的時區的名字,我應該通過參數傳遞值(傳遞用戶時區)。

在CurrentThread中,我設置了用戶文化,因此此請求中的所有代碼都以該文化(日期格式,資源,數字格式)運行。 有一種方法可以將用戶的時區存儲在像CurrentThread這樣的全局對象中?

我想要完成的是避免將時區傳遞給上述擴展方法,而是從像CurrentThread這樣的全局對象中獲取時區。擴展方法將從控制器代碼和視圖中調用。

+0

目前還不清楚你問什麼。你實際擁有哪些信息,你在儲存什麼,你想達到什麼目的?請用數據和代碼示例。 –

+0

將所有時間存儲在UTC中,並將它們轉換爲您想要的任何視圖 – Trix

+0

@MattJohnson,請檢查我的編輯,希望現在更清楚。 – Romias

回答

-1

你有一個基準時間像UTC,對不對?您沒有數據庫中的用戶指定時區。因此,現在您可以根據需要添加或減去UTC時區。

可能的補充可以提供一個簡單的解決方案。 例子:

Name ----------TimeZone 
------------------------ 
Nick ------- UTC - 6 
Hary ------- UTC + 1 

因此,如果當前UTC時間是下午7點或18點,然後

Nick = 18-6 = 12/12 PM 
Harry = 18+1 = 19/8PM 
+0

時區!=偏移。而且,.NET不需要手動算術就可以爲這個內置的很多功能。 –

相關問題