今天在开发工程中,遇到了一个问题:实体类里面有属性类型是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了。