最近我必须在一个Android移动应用项目中工作,但由于在部署到特定设备版本(Android API 16 版本 4.2.1)期间抛出错误,因此无法使用Newtonsoft Json (Json.NET)。
幸运的是,我找到了一个替代的json库(System.Json)。然而,这个库没有一种方法可以将JSON日期隐式转换为C# DateTime。
我创建了以下两个函数来进行可空日期和从字符串JSON日期(即/Date(1389435240000+0000)/)的日期转换
代码可以改进,但现在做到了它的工作
public static DateTime? ConvertToNallableDate(string date)
{
DateTime? val = null;
try{
if(!string.IsNullOrEmpty(date))
{
date = date.Replace ("/Date(", string.Empty).Replace (")/", string.Empty);
int pIndex = date.IndexOf ("+");
if(pIndex < 0) pIndex = date.IndexOf("-");
long millisec = 0;
date = date.Remove (pIndex);
long.TryParse (date, out millisec);
System.Globalization.CultureInfo ci = new System.Globalization.CultureInfo("en-GB");
DateTime newDate = DateTime.Parse ("1970,1,1", ci);
newDate = newDate.AddMilliseconds(millisec);
val = newDate == null ? (DateTime?)null : newDate;
}
}catch {
val = null;
}
return val;
}
public static DateTime ConvertToDate(string date)
{
DateTime val = new DateTime();
try{
if(!string.IsNullOrEmpty(date))
{
date = date.Replace ("/Date(", string.Empty).Replace (")/", string.Empty);
int pIndex = date.IndexOf ("+");
if(pIndex < 0) pIndex = date.IndexOf("-");
long millisec = 0;
date = date.Remove (pIndex);
long.TryParse (date, out millisec);
System.Globalization.CultureInfo ci = new System.Globalization.CultureInfo("en-GB");
DateTime newDate = DateTime.Parse ("1970,1,1", ci);
val = newDate.AddMilliseconds(millisec);
}
}catch {
val = new DateTime();
}
return val;
}