我有一个接口,它为我提供了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。
答案 0 :(得分:2)
我认为您要完成的工作是显示DateTime
实例的 time 部分;但表示为TimeSpan
。
在这种情况下,这应该就是你所需要的。
var timeSpan = item.DateTimeUpdated.TimeOfDay;
如果您正在尝试显示&#34; 很久以前这是如何更新的?&#34;然后你需要做类似的事情。
var timeSpanSince = DateTime.Now - item.DateTimeUpdated;
(这些答案没有考虑时区造成的复杂性,或者您的数据库值是否存储为UTC等。)
编辑:查看其余代码,您可能也会对如何更改数据网格中值的显示方式感兴趣: