我有一个从json字符串反序列化的对象列表,其中包含以UTC时间表示的开始/结束时间字段。例如:“2016-08-22T15:30:00Z”(美国东部时间上午11:30)。我需要在服务器上将时间转换为用户友好的格式(例如,“11:30 AM”),然后在JSON中向下发送列表以便在网页上显示。是否有一个c#函数可以帮助我将时间属性转换为所需的结果?
代码示例:
public class Event
{
public int EventId { get; set; } //1
public string Name { get; set; } //Karate class
public string StartAt { get; set; } //2016-08-22T15:30:00Z
public string EndAt { get; set; } //2016-08-22T16:30:00Z
}
public class Events
{
public List<Event> Events {get; set;}
}
//de-serialize from json string
string eventsForToday = "{}" //some json string from api
var eventList = (Events)JsonConvert.DeserializeObject(eventsForToday, typeof(Events));
foreach (var item in eventList.Events)
{
//needs to be 11:30AM instead of 2016-08-22T15:30:00Z
Console.WriteLine (item.StartAt)
}
我知道逻辑是UTC时间应该偏移4(或5取决于一年中的时间)。但是,修改对象最直接的方法是什么?有没有办法投射格式改变的新列表等?
答案 0 :(得分:0)
您可以将每个字符串转换为DateTime。 DateTime有一个ToLocalTime()方法,只要您指定DateTime的Kind属性,它就会为您进行转换。例如,
foreach (var item in eventList.Events)
{
DateTime timeUtc = DateTime.SpecifyKind(DateTime.Parse(item.StartAt), DateTimeKind.Utc);
Console.WriteLine (timeUtc.ToLocalTime()); //Add .ToShortTimeString() if you just want the time (and not the date)
}
但是,由于你的字符串有一个尾随的“Z”,你应该可以使用Convert.ToDateTime(item.StartAt).ToWhateverString()