我收到的日期和时间格式如下:
/Date(1434013505757-0700)/
我只是找不到将其重新格式化为可读格式的方法。
提前感谢您,
您看到的是DataContractJsonSerializer生成的Micoroft Date格式。
以下示例输出当前日期,然后输出示例中的日期时间:
var ser = new DataContractJsonSerializer(typeof(Example));
var ex = new Example{ MSDate = DateTime.Now};
// write Example to the stream
var ms = new MemoryStream();
ser.WriteObject(ms, ex);
var cnt = Encoding.UTF8.GetString(ms.ToArray());
Debug.WriteLine(cnt); // show wireformat
ms.Position = 0;
var exdes = (Example)ser.ReadObject(ms); // read back
// create our own json stream and deserialize
var somejsonwithdate = @"{""MSDate"":""/Date(1434013505757-0700)/""}";
var yourdate = (Example) ser.ReadObject(
new MemoryStream(Encoding.UTF8.GetBytes(somejsonwithdate)));
Debug.WriteLine("{0:yyyy-MM-dd h:mm:ss", yourdate.MSDate);
这是DTO型
public class Example
{
public DateTime MSDate { get; set; }
}
此代码在我的调试输出中输出:
{"MSDate":"/日期(1435128933854+0200)/"}
2015-06-11 11:05:05
来自MSDN文章Stand-Alone JSON Serialization
DateTime值以JSON字符串的形式出现/日期(700000+0500)/";,其中,第一个数字(在所提供的示例中为700000)是自1970年1月1日午夜以来的GMT时区、常规(非夏令时)时间中的毫秒数。该数字可能为负数以表示较早的时间。由"+0500";示例中的时间是可选的,并指示时间是Local类型的,也就是说,应在反序列化时转换为本地时区。如果不存在时间,则将时间反序列化为Utc。实际数字(本例中为"0500")及其符号(+或-)被忽略。
ASP.NET AJAX客户端JavaScript代码会自动将这些字符串转换为JavaScript DateTime实例。如果有其他具有类似形式的字符串不是.NET中的DateTime类型,那么它们也会被转换。
只有当"/"字符被转义(即JSON看起来像"/Date(700000+0500)/"),并且由于这个原因WCF的JSON编码器(由WebHttpBinding启用)总是转义"/"性格
这是(最佳猜测)具有毫秒分辨率和时区偏移量的UNIX时间戳。
请参阅此处了解如何在两者之间转换。请记住,此示例是基于"秒"分辨率的,但您的示例是以"毫秒"分辨率的。所以使用AddMilliSeconds。
1434013505757-0700
|<--------->| |--|
Unix TimeZone
TimeStamp Offset
希望你能自己弄清楚代码。请注意,时区偏移以小时为单位。仅供参考Unix时间戳定义为自1970年1月1日午夜格林尼治以来经过的秒数(或毫秒)。