最近開始試著學 ASP.Net Core ,用 .Net 5 寫WebAPI。用前端的 DatePicker 選日期會變成前一天,再追下去,居然是DateTime都會少8小時,這到底是怎麼一回事呢?可能是我之前都沒有用MVC的Model去解析JSON物件,所以沒有發生。 用 股溝 搜尋在 暗黑大的文章 有提到這問題,但我不太相信微軟會犯這種低級錯誤,所以再繼續追下去真正原因。 先假設 Model 裡有一個 public DateTime StartDate {get; set;} WebAPI接收到前端吐回的JSON Date 字串後,會解析成 StartDate.Kind 會是 DateTimeKind.Utc; 這沒錯,若是 DateTime now = DateTime.Now; now.Kind 是 DateTimeKind.Local 所以存到SQL Server時,變成UTC時區,而SQL Server讀取的時候,會依照儲存的時區把資料吐出來,再自己把DateTime.ToString("yyyy/MM/dd")時,就會變成前一天了@@。 目前我的解法是在儲存到SQL Server前, StartDate = StartDate.ToLocalTime(); 若是在讀取時轉換應該也行啦,但我的情況和暗黑大一樣,使用者都在這小島內,不會跨時區,用最簡單的方式處理就好。就算有人跨時區使用, DateTime.ToLocalTime() 也不會有錯誤。 結案收工。