上海网站建设 劲晟,网站关键词优化推广哪家好,微信购物网站开发,wordpress 点评 主题rfc3339 是一种包含时区信息的字符串标准格式。格式为YYYY-MM-DDTHH:mm:ssTIMEZONE#xff0c;YYYY-MM-DD表示年月日#xff0c;T出现在字符串中#xff0c;表示time元素的开头#xff0c;HH:mm:ss表示时分秒#xff0c;TIMEZONE表示时区#xff08;08:00表示东八区时间TIMEZONEYYYY-MM-DD表示年月日T出现在字符串中表示time元素的开头HH:mm:ss表示时分秒TIMEZONE表示时区08:00表示东八区时间领先UTC 8小时即北京时间。例如2015-05-20T13:29:3508:00 表示北京时间2015年5月20日 13点29分35秒。要在 C# 中获取一个符合 RFC3339 标准的字符串可以使用以下代码var str DateTime.Now.ToString(yyyy-MM-ddTHH:mm:ssK);
Console.WriteLine(str);
默认情况下Newtonsoft.Json 序列化出的 JSON 字符串是不符合 RFC3339 标准的。以下代码演示了如何解决这个问题public class Rfc3339DateTimeConverter : IsoDateTimeConverter
{public Rfc3339DateTimeConverter(){this.DateTimeFormat yyyy-MM-ddTHH:mm:ssK;}
}
public class Model1
{[Newtonsoft.Json.JsonProperty(ItemConverterType typeof(Rfc3339DateTimeConverter))]public DateTime CreatedTime { get; set; }
}
调用var test new Model1
{CreatedTime DateTime.Parse(2015-05-20T13:29:3508:00)
};
var json JsonConvert.SerializeObject(test);
Console.WriteLine(json);
输出{CreatedTime:2015-05-20T13:29:3508:00}
如果系统中获取到的时间不包含时区信息比如从数据库或字符串转换那么以上代码会省略掉对时区的输出var dt DateTime.Parse(2015-05-20 13:29:35);
Console.WriteLine(dt.ToString(yyyy-MM-ddTHH:mm:ssK));
输出2015-05-20T13:29:35
要解决该问题可以直接将时区信息写在格式中var dt DateTime.Parse(2015-05-20 13:29:35);
Console.WriteLine(dt.ToString(yyyy-MM-ddTHH:mm:ss08:00));