How to convert DateTime from JSON to C#?
本问题已经有最佳答案,请猛点这里访问。
Possible Duplicate:
How to convert UNIX timestamp to DateTime and vice versa?
号
我有以下课程:
1 2 3 4 5 6 | [DataContractAttribute] public class TestClass { [DataMemberAttribute] public DateTime MyDateTime { get; set; } } |
这是JSON:
1 | {"MyDateTime":"1221818565" } |
号
正在从php webservice返回json。
我需要做的是将该epoch字符串转换为有效的c datetime。最好的方法是什么?
我可以这样做:
1 2 3 4 5 6 7 8 9 | [IgnoreDataMemberAttribute] public DateTime MyDateTime { get; set; } [DataMemberAttribute(Name ="MyDateTime")] public Int32 MyDateTimeTicks { get { return this.MyDateTime.Convert(...); } set { this.Created = new DateTime(...); } } |
但问题是,MyDateTimeTicks是公共的(将其更改为私有会导致序列化过程中出现异常)
完成你发布的内容,让它成为私人的,对我来说似乎很好。
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 | [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)); } } } |
。
1 2 3 4 5 6 7 8 9 10 11 12 13 14 | 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; } |
我知道你的问题是针对PHP的,但我只想注意一个针对.NET JSON的"gotcha":似乎.NET给出的日期是"从epoch开始的毫秒数"(而不是秒)。在这种情况下,addseconds行应该是:江户十一〔一〕号
更多信息:http://blogs.msdn.com/b/marcelolr/archive/2008/03/05/system-datetime-ticks-vs-json-date.aspx
这就是我想出来的。在C中,您似乎需要创建一个新的日期时间,并将epoch值作为"秒"添加到此日期时间。下面是代码中的内容:
1 |
使用Visual Studio即时窗口时,我将此操作的结果打印到调试器控制台:
1 2 3 4 5 6 7 8 9 10 11 12 13 14 | {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 |
号
您需要的是:
1 2 | DateTime unixEpoch = new DateTime(1970, 1, 1, 0, 0, 0, 0, DateTimeKind.Utc); DateTime dotnetTime = unixEpoch.AddSeconds(Convert.ToDouble(ticks)); |
其中,