将ISO 8601 UTC时间格式转换为EST的mm:mm

时间:2016-08-22 16:08:37

标签: c# json datetime linq-to-objects utc

我有一个从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取决于一年中的时间)。但是,修改对象最直接的方法是什么?有没有办法投射格式改变的新列表等?

1 个答案:

答案 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()