今天在開發工程中,遇到了一個問題:實體類里面有屬性類型是DateTime,序列化以后會帶有大寫的“T”,為什么時間格式中間會帶有一個大寫的T呢?
通過查詢,發現這是標准格式規定的:國際標准化組織的國際標准ISO 8601是日期和時間的表示方法,全稱為《數據存儲和交換形式·信息交換·日期和時間的表示方法》
原文如下:
日期和時間的組合表示法編輯
合並表示時,要在時間前面加一大寫字母T,如要表示北京時間2004年5月3日下午5點30分8秒,可以寫成2004-05-03T17:30:08+08:00或20040503T173008+08。
所以這個T date和time合並表示時,中間加個T。
iso 8806的百度地址是:
https://baike.baidu.com/item/ISO%208601/3910715?fr=aladdin
但是這種結果非常不直觀,我們需要修改一下序列化時的格式。
新建Order類:
using System; namespace DateFormatTest { public class Order { public int ID { get; set; } public DateTime OrderTime { get; set; } } }
在main方法里面調用:
using Newtonsoft.Json; using System; namespace DateFormatTest { internal class Program { static void Main(string[] args) { // 實例化對象 Order order = new Order(); order.ID = 1; order.OrderTime = DateTime.Now; // 序列化 string str=JsonConvert.SerializeObject(order); Console.WriteLine(str); Console.ReadKey(); } } }
運行結果
我們修改序列化的方法,添加一個幫助類:
using Newtonsoft.Json; using Newtonsoft.Json.Converters; namespace DateFormatTest { public static class JsonUtility { /// <summary> /// /// </summary> /// <param name="data">要序列化的數據</param> /// <param name="dateTimeFormat">時間格式 默認yyyy-MM-dd HH:mm:ss</param> /// <returns></returns> public static string SerializeToJson(object data,string dateTimeFormat = "yyyy-MM-dd HH:mm:ss") { IsoDateTimeConverter timeConverter = new IsoDateTimeConverter() { DateTimeFormat = dateTimeFormat }; return JsonConvert.SerializeObject(data, Formatting.Indented, timeConverter); } } }
這里面序列化的時候,我們指定了時間格式。
修改Main方法
using System; namespace DateFormatTest { internal class Program { static void Main(string[] args) { // 實例化對象 Order order = new Order(); order.ID = 1; order.OrderTime = DateTime.Now; // 序列化,這里使用默認格式進行序列化 string str= JsonUtility.SerializeToJson(order); Console.WriteLine(str); Console.ReadKey(); } } }
運行結果
這時時間格式就不會帶有T了。