最近在做一個數據交換服務接口,用的 .NET Web API 項目。需要監控每次請求的數據,也就是操作日志。請求數據為實體對象,所以我用了序列化將請求內容讀取并寫入日志。咋一看,好像并沒有什么問題,但是時間卻不是我們平??吹降母袷健PЧ麍D是這樣的:

猜測這里是由于 js 初始化時間的時候往往是向 1970/01/01 添加毫秒數,JavaScriptSerializer 進行序列化的時候也會格式化為距離1970/01/01 到當前時間點 GMT+0 時間的毫秒數,如果直接反序列化可以看到少了8小時,且時間精度到毫秒,原來初始化的時間精度是 10-7 秒。
這種時間格式是使用于 js 的,但如果我們想把這個信息保存的話,這樣的時間格式不適合閱讀。因此需要做一下轉換。以下代碼利用正則表達式將毫秒數轉換成本時區的時間格式:
/// <summary>    /// 序列化請求數據    /// </summary>    /// <param name="obj">請求數據</param>    /// <returns></returns>    public string LocalSerialize(object obj)    {      var jser = new System.Web.Script.Serialization.JavaScriptSerializer();      var json = jser.Serialize(obj);      //將時間格式轉換為適合閱讀習慣的格式      json = System.Text.RegularExpressions.Regex.Replace(json, @"http:///Date/((/d+)/)///", match =>      {        DateTime dt = new DateTime(1970, 1, 1);        dt = dt.AddMilliseconds(long.Parse(match.Groups[1].Value));        dt = dt.ToLocalTime(); //本地時間        return dt.ToString(); ;      });      return json;    }然后再調用該方法就可以了。完成后的效果圖:

至此完成了轉換。
本文參考:C# JavaScriptSerializer序列化時的時間處理詳解
以上就是本文的全部內容,希望對大家的學習有所幫助,也希望大家多多支持武林網。
新聞熱點
疑難解答