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

C# 将ISO 8601 UTC时间格式转换为EST的hh:mm,c#,json,datetime,linq-to-objects,utc,C#,Json,Datetime,Linq To Objects,Utc,我有一个从json字符串反序列化的对象列表,json字符串有一个以UTC时间表示的开始/结束时间字段。例如:“2016-08-22T15:30:00Z”(美国东部时间上午11:30)。我需要在服务器上将时间转换为用户友好的格式(例如,“11:30 AM”),然后再发送JSON格式的列表以显示在网页上。是否有一个c#函数可以帮助我完成将时间属性转换为所需结果的过程 代码示例: public class Event { public int EventId { get

我有一个从json字符串反序列化的对象列表,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) 
    }
公共类事件
{
public int EventId{get;set;}//1
公共字符串名称{get;set;}//空手道类
公共字符串StartAt{get;set;}//2016-08-22T15:30:00Z
公共字符串结束于{get;set;}//2016-08-22T16:30:00Z
}
公开课活动
{
公共列表事件{get;set;}
}
//从json字符串反序列化
string eventsfortody=“{}”//api中的一些json字符串
var eventList=(Events)JsonConvert.DeserializeObject(eventsfortody,typeof(Events));
foreach(eventList.Events中的var项)
{
//需要是上午11:30,而不是2016-08-22T15:30:00Z
Console.WriteLine(item.StartAt)
}

我知道逻辑是,无论UTC时间是什么,它都应该被4(或5,取决于一年中的时间)抵消。但修改对象最直接的方法是什么?是否有一种方法可以在格式发生变化等情况下投影新列表

您可以将每个字符串转换为日期时间。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()

将每个字符串转换为一个日期时间。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()