環境:.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