日期时间格式.Net C#

时间:2015-06-24 06:06:26

标签: .net datetime

我收到这种格式的日期和时间:

\/Date(1434013505757-0700)\/

我找不到将其重新格式化为人类可读格式的方法。

提前谢谢你,

2 个答案:

答案 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日午夜起经过的秒数(或毫秒)。