c# json serialization silverlight-2.0

¿Cómo convertir DateTime de JSON a C#?



serialization silverlight-2.0 (5)

Esto es lo que se me ocurrió. En C #, parece que necesita crear un nuevo DateTime y agregar el valor de época como ''segundos'' a este DateTime. Esto es lo que parece en el código:

new System.DateTime(1970, 1, 1, 0, 0, 0, 0).AddSeconds(1221818565);

Al usar la ventana inmediata de Visual Studio, imprimí el resultado de esta operación en la consola del depurador:

{9/19/2008 10:02:45 AM} Date: {9/19/2008 12:00:00 AM} Day: 19 DayOfWeek: Friday DayOfYear: 263 Hour: 10 Kind: Unspecified Millisecond: 0 Minute: 2 Month: 9 Second: 45 Ticks: 633574153650000000 TimeOfDay: {10:02:45} Year: 2008

Posible duplicado:
Cómo convertir la marca de tiempo de UNIX a DateTime y viceversa?

Tengo la siguiente clase:

[DataContractAttribute] public class TestClass { [DataMemberAttribute] public DateTime MyDateTime { get; set; } }

Aquí está el JSON:

{ "MyDateTime":"1221818565" }

El JSON se devuelve desde un servicio web PHP.

Lo que necesito hacer es convertir esa cadena de época en un C # DateTime válido. ¿Cuál es la mejor manera de hacer esto?

Puedo hacer esto:

[IgnoreDataMemberAttribute] public DateTime MyDateTime { get; set; } [DataMemberAttribute(Name = "MyDateTime")] public Int32 MyDateTimeTicks { get { return this.MyDateTime.Convert(...); } set { this.Created = new DateTime(...); } }

Pero el problema con esto es que MyDateTimeTicks es público (al cambiarlo a privado causa una excepción en el proceso de serialización)


Lo que quieres es lo siguiente:

DateTime unixEpoch = new DateTime(1970, 1, 1, 0, 0, 0, 0, DateTimeKind.Utc); DateTime dotnetTime = unixEpoch.AddSeconds(Convert.ToDouble(ticks));

donde ticks es el valor que te pasa PHP.


Terminar lo que publicaste, y hacerlo en privado parecía funcionar bien para mí.

[DataContract] public class TestClass { private static readonly DateTime unixEpoch = new DateTime(1970, 1, 1, 0, 0, 0, 0, DateTimeKind.Utc); [IgnoreDataMember] public DateTime MyDateTime { get; set; } [DataMember(Name = "MyDateTime")] private int MyDateTimeTicks { get { return (int)(this.MyDateTime - unixEpoch).TotalSeconds; } set { this.MyDateTime = unixEpoch.AddSeconds(Convert.ToInt32(value)); } } }



private DateTime ConvertJsonStringToDateTime(string jsonTime) { if (!string.IsNullOrEmpty(jsonTime) && jsonTime.IndexOf("Date") > -1) { string milis = jsonTime.Substring(jsonTime.IndexOf("(") + 1); string sign = milis.IndexOf("+") > -1 ? "+" : "-"; string hours = milis.Substring(milis.IndexOf(sign)); milis = milis.Substring(0, milis.IndexOf(sign)); hours = hours.Substring(0, hours.IndexOf(")")); return new DateTime(1970, 1, 1, 0, 0, 0, 0, DateTimeKind.Utc).AddMilliseconds(Convert.ToInt64(milis)).AddHours(Convert.ToInt64(hours) / 100); } return DateTime.Now; }