我们正在使用以下格式收到我们收到日期时间的任何API。
如何在解析JSON时转换此日期时间。
我们尝试使用这个json IsoDateTimeConverter
public class DateFormatConverter : IsoDateTimeConverter
{
public DateFormatConverter(string format) => DateTimeFormat = format;
}
并在财产中使用
[JsonConverter(typeof(DateFormatConverter), "MM/dd/yyyy hh:mmtt Z")]
public DateTime createdOn { get; set; }
收到错误:字符串未被识别为有效的DateTime。
答案 0 :(得分:0)
您应该将DateFormatString
定义为"MM/dd/yyyy hh:mmtt \"GMT\"z"
z
指定了偏移值。由于无法识别时区缩写,因此您无法使用适用于各种时区的格式,这就是提及GMT
指定格式的原因。
为什么缩写无法识别
缩写词具有多对一关联。例如,“AMT”意味着不同的东西,取决于您的文化,您所处的世界的哪个部分以及您的应用环境。
AMT "Armenia Time" Asia UTC + 4 hours
AMT "Amazon Time" South America UTC - 4 hours
完整解决方案代码
using System;
using System.Collections.Generic;
using System.Linq;
using Newtonsoft.Json;
public class TestClass
{
public int Id {get; set;}
public DateTime Date {get; set;}
public override string ToString()
{
return string.Format("Id : {0} Date : {1}", this.Id, this.Date);
}
}
public class Program
{
public static void Main()
{
var jsonString = "[{\"id\":1, \"date\":\"03/21/2018 11:08AM GMT\"}, {\"id\":2, \"date\":\"03/18/2018 11:08AM GMT+1\"}, {\"id\":3, \"date\":\"03/15/2018 11:08AM GMT+10\"}]";
var list = JsonConvert.DeserializeObject<List<TestClass>>(jsonString, new JsonSerializerSettings() { DateFormatString = "MM/dd/yyyy hh:mmtt \"GMT\"z"});
list.ForEach((item) => Console.WriteLine(item));
}
}
以上程序的输出如下(基于我目前的文化,即en-US)
Id:1日期:3/21/2018 11:08:00 AM
Id:2日期:3/18/2018 10:08:00 AM
Id:3日期:3/15/2018 1:08:00 AM
检查实时小提琴here。