當我們的項目國際化后,需要處理時區問題。
在.NET Core之前我們可以通過以下代碼將客戶端時間轉換為服務端時間:
DateTime serverTime = TimeZone.CurrentTimeZone.ToLocalTime(clientTime);
在.NET Core里,TimeZone類已被標記為已過期,那么我們應該如何使用不過期的API進行時區轉換呢?
DateTime serverTime = TimeZoneInfo.ConvertTime(clientTime, TimeZoneInfo.Local);
以下是博主自己寫的DateTimeExtensions類中的轉換為服務端時間的擴展方法:
public static class DateTimeExtensions { /// <summary> /// 將客戶端時間轉換為服務端本地時間 /// </summary> /// <param name="clientTime">客戶端時間</param> /// <returns>返回服務端本地時間</returns> public static DateTime ToServerLocalTime(this DateTime clientTime) { //DateTime serverTime1 = TimeZone.CurrentTimeZone.ToLocalTime(clientTime); //在.NET Core標識已過期的類TimeZone的寫法 DateTime serverTime2 = TimeZoneInfo.ConvertTime(clientTime, TimeZoneInfo.Local);//等價的建議寫法 return serverTime2; } }
關於TimeZone與TimeZoneInfo類的區別/比較,請參考:
https://www.cnblogs.com/dongjh/archive/2012/08/30/2664676.html
在不同時區之間轉換時間,請參考MSDN案例: