将datetime变量转换为timespan变量

时间:2017-03-30 14:24:29

标签: c# wpf

我有一个接口,它为我提供了DateTime更新的DateTime类型,但我需要将其作为TimeSpan类型读取。我正在尝试进行转换,它有点工作但不是真的。我跟着这篇文章。 Convert DateTime to TimeSpan

代码:

if (e.CmsData != null)
{
    List<NewAgent> newAgentList = new List<NewAgent>();                    

    Dispatcher.BeginInvoke(DispatcherPriority.Normal, (Action)(() =>
    {                                         
        foreach (var item in e.CmsData.Agents)
        {
            NewAgent newAgents = new ScoreBoardClientTest.NewAgent();

            newAgents.AgentName = item.AgName;

            newAgents.AgentExtension = item.Extension;

            newAgents.AgentDateTimeChange = ConvertedDateTimeUpdated;

            newAgents.AuxReasons = item.AuxReasonDescription;

            newAgents.LoginIdentifier = item.LoginId;

            ConvertedDateTimeUpdated = item.DateTimeUpdated - new DateTime(01/01/2000);
            time = ConvertedDateTimeUpdated;
            agentTime = time -  DateTime.Now.TimeOfDay;

            newAgents.AgentDateTimeStateChange = agentTime;
            newAgentList.Add(newAgents);
        }

        datagrid.ItemsSource = newAgentList;
    }));                    
}

XAML:

<DataGrid.Columns>
    <DataGridTextColumn Header="Name" Binding="{Binding AgentName}"  />
    <DataGridTextColumn Header="Aux Reason" Binding="{Binding AuxReasons}" />
    <DataGridTextColumn Header="Time" Binding="{Binding AgentDateTimeStateChange}" />
</DataGrid.Columns>

AgentClass

class NewAgent
    {
        public string AgentName { get; set; }
        public int AgentExtension { get; set; }
        public TimeSpan AgentDateTimeChange { get; set; }
        public TimeSpan AgentDateTimeStateChange { get; set; }
        public String AuxReasons { get; set; }
        public string LoginIdentifier { get; set; }

    }

当我将其打印到我的列表中时,我将以下粘贴到字段而不是格式00:00:00。

如果这个代码不足以理解我想要完成的内容,请告诉我。我会发布我所拥有的所有内容。同样重要的是要注意item.datetimeupdated的格式为00/00/0000 00:00:00。

enter image description here

1 个答案:

答案 0 :(得分:2)

我认为您要完成的工作是显示DateTime实例的 time 部分;但表示为TimeSpan

在这种情况下,这应该就是你所需要的。

var timeSpan = item.DateTimeUpdated.TimeOfDay;

如果您正在尝试显示&#34; 很久以前这是如何更新的?&#34;然后你需要做类似的事情。

var timeSpanSince = DateTime.Now - item.DateTimeUpdated;

(这些答案没有考虑时区造成的复杂性,或者您的数据库值是否存储为UTC等。)

编辑:查看其余代码,您可能也会对如何更改数据网格中值的显示方式感兴趣: