1. 程式人生 > >.Net Core WebApi返回日期格式的問題

.Net Core WebApi返回日期格式的問題

環境:.net core 2.1 webapi


問題簡介: 返回DateTime,前端接收到的字元有時候為2018-01-01T12:01:01,有時候為2018-01-01T01:01:01.722+08:00,無法正常解析

 

原因:

WebApi的Json解析採用的是NewtonSoft的Json.net類庫,其格式化日期預設採用的是ISO-8601 格式,該標準規定,日期後面加具體時間必須帶上字元“T”,最後的+08:00代表東八區。因此, DateTime.Now會被格式化成成2018-01-01T01:01:01.722+08:00。

 

我們用Reflector反編譯程式碼,搜尋類JsonSerializer看看,可以發現預設日期格式為"yyyy'-'MM'-'dd'T'HH':'mm':'ss.FFFFFFFK"。


解決方法:
1、依舊返回預設格式,前端按此種格式解析日期
2、如果應用程式不涉及到跨時區,後端可以全域性修改日期的返回格式,比如可以修改為"2018-01-01 12:01:01"
.net core處理方法:


.net framework(4.5.2為例)

3、後端區域性修改返回格式,可以用比較醜陋的方式,先格式化為字串,再轉回到DateTime處理
如: timeTest.Dt1 = DateTime.Parse(timeTest.Dt1.ToString("yyyy-MM-dd HH:mm:ss"));

參考資料:
https://blog.gisspan.com/2016/10/Everything-you-need-to-know-about-dates.html
https://stackoverflow.com/questions/16697346/datetime-json-return-from-webapi-with-default-serializer
https://baike.baidu.com/item/ISO%208601/3910715?fr=aladdin