2013-03-11 75 views
0

我在我的應用程序的用戶submited日期時間轉換爲UTC:轉換爲UTC時間在我的服務器不工作

TimeZoneInfo.ConvertTimeToUtc(DateTime.Parse(model.SessionEnd))

我自己也嘗試這樣的事情

combinedDateTime = DateTime.SpecifyKind(combinedDateTime, DateTimeKind.Utc);

當我在我的電腦上運行網絡應用程序時,

都能正常工作。只要我將它上傳到服務器並從那裏嘗試它,它就不會轉換時間,最終只返回我輸入的相同日期時間。我確定我的類庫正在最新版本正確加載,因爲我檢查了我的調試語句是否也被更新。這是一個服務器設置或我可以做些什麼來解決這個問題?

+0

服務器上的日期和時間是什麼?它設置在哪個區域? – Oded 2013-03-11 22:29:59

+0

服務器上的日期和時間比我的電腦時鐘早7個小時。我如何檢查區域設置?當我在服務器上執行'DateTime.UtcNow'時,它會給出正確的時間。它只有在將7小時提前轉換日期時間 – anthonypliu 2013-03-11 22:33:14

+3

時?嗯 - 在格林尼治標準時間已經是服務器了嗎? – 2013-03-11 22:34:51

回答

2

唯一理智的方法是讓客戶端代碼提交帶時區的時間/日期時間值。通常在客戶端轉換爲UTC是合理的,並且也支持JavaScript(如果您仍然喜歡timzone,請使用getTimeZoneOffset)。我建議在UTC(Z)時區格式化爲ISO8601格式的發佈日期時間值,這是衆所周知的可排序格式,對同一個字符串沒有多重含義(2013-03-11T03:52Z)。

請注意,有時您需要明確的時間而沒有時區(比如在我上午9點喚醒我) - 確保瞭解您的用例。

1

當你的客戶後,從客戶端的日期時間爲一個字符串,你可以做到以下幾點:

1)你可以將他們的時間轉換爲UTC在客戶端(如阿列克謝Levenov的答案)

2)你可以通過客戶端的時間到服務器並轉換他們的時區,在服務器端

3)您可以將他們的時間轉換爲UTC在客戶端和發送它們的時區服務器端

根據你的需要你c選擇這些中的任何一個。第三個只有在你稍後想在服務器端使用他們的時區時纔有用。