我想要做的事情很簡單:.NET日期時間及TimezoneInfo.ConvertTime黨
private static TimeZoneInfo Tzi = // ... custom timeZone I've set;
public static DateTime ToTimeZone(DateTime dateTime, TimeZoneInfo target)
{
return TimeZoneInfo.ConvertTime(dateTime, Tzi, target);
}
理念是 - 說得出服務器的所有日期將自動轉換爲特定的時區和保存這樣對DB (UTC,美國中部,太平洋美國,無論如何)。
只要在服務器上設置的時區與Tzi相同,此功能就可以很好地工作。然而,如果不是這樣,轉換就會失敗 - 創建DateTime實例時,.NET會將其設置爲機器的TimeZone,然後TimeZoneInfo.ConvertTime(dateTime,Tzi,target)以一種奇怪的方式處理我的請求。例如,假設服務器時區是太平洋(UTC -8),我將Tzi設置爲中央(UTC -6),並且我以Singapure(UTC +8)爲目標。
現在,當我呼叫TimeZoneInfo.ConvertTime(dateTime,Tzi,目標)首先「將dateTime從UTC -8轉換爲UTC -6(Tzi時區),加上2小時......並且只有從Tzi到目標。
有沒有辦法發信號給TimeZoneInfo.ConvertTime我發送的dateTime是在TimeZone中我是通過參數傳入的,而不是在服務器的TimeZone中?
編輯: 好的,兩個答案都是很好的建議,但似乎我有不同的麻煩。 TimeZoneInfo.ConvertTime(DATETIME,奧茲,目標)似乎是正常工作,而真正的罪魁禍首居然是:
return Json(new {data}, JsonRequestBehavior.AllowGet);
輸出日期,如: 「創建」: 「/日期(1346810072950)/」。我已經確認發送日期根據服務器上的TimeZone而不同(更改服務器的TimeZone後需要重新啓動AppPool)。任何人都有這方面的經驗,並建議如何影響ASP.NET MVC輸出日期在JSON中的方式發回給客戶端?
相關:http://stackoverflow.com/questions/2532729/daylight-saving-time-and-timezone-best-practices – Oded
1346802872950 ... – kape123