我收到这种格式的日期和时间:
\/Date(1434013505757-0700)\/
我找不到将其重新格式化为人类可读格式的方法。
提前谢谢你,
答案 0 :(得分:3)
您正在查看DataContractJsonSerializer生成的Micoroft日期格式。
以下示例输出当前日期,然后输出示例中的日期时间:
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值以“/ Date(700000 + 0500)/”的形式显示为JSON字符串,其中第一个数字(在提供的示例中为700000)是GMT时区中的毫秒数,常规(非夏令时)1970年1月1日午夜以来的时间。这个数字可能是负数,表示较早的时间。示例中由“+0500”组成的部分是可选的,表示时间属于Local类型 - 也就是说,应该在反序列化时转换为本地时区。如果不存在,则将时间反序列化为Utc。
表示实际数字(本例中为“0500”)及其符号(+或 - )。ASP.NET AJAX客户端JavaScript代码会自动将此类字符串转换为JavaScript DateTime实例。如果还有其他字符串具有类似于.NET中DateTime类型的表单,那么它们也会被转换。
转换仅在转义“/”字符时发生(即,JSON看起来像“/ Date(700000 + 0500)/”),因此WCF的JSON编码器(由WebHttpBinding启用)始终逃避“/”字符。
答案 1 :(得分:1)
这是(最佳猜测)UNIX Timestamp,具有毫秒分辨率和时区偏移。
请参阅here,了解如何在两者之间进行转换。请记住,该示例基于' Second'分辨率,但你的是在MilliSecond'解析度。所以使用AddMilliSeconds。
1434013505757-0700
|<--------->| |--|
Unix TimeZone
TimeStamp Offset
希望你能自己弄清楚代码。请注意,时区偏移量以小时为单位。仅供参考Unix-Timestamp定义为自格林威治1970年1月1日午夜起经过的秒数(或毫秒)。