我有这段代码:
private void TimePlayedTimer_Start()
{
timePlayedStr = "00:00:00";
timePlayed = new DispatcherTimer();
timePlayed.Tick += timePlayedTimer_Tick;
timePlayed.Interval = new TimeSpan(0, 0, 0, 1);
timePlayed.Start();
}
void timePlayedTimer_Tick(object sender, object e)
{
TimeSpan ts = TimeSpan.Parse(timePlayedStr);
ts = ts.Add(TimeSpan.FromSeconds(1));
timePlayedStr = ts.ToString();
}
当我逐行调试此行时,TimeSpan ts
将等于"00:00:00"
,但在行ts = ts.Add(TimeSpan.FromSeconds(1));
后,某些属性TotalDays = 2.313232439423
,TotalHours = 0.000555555
,{ {1}}而不是向TotalMilliseconds = 2000
属性添加1
,而是返回了这些属性值。
有谁知道我做错了什么?
PS:我只想在每TotalSeconds
TimeSpan
添加秒
答案 0 :(得分:6)
TotalDays
的值实际为2.31481481481481E-05
,即0.0000231481481481481
。
你得到的价值恰好是第二个滴答的预期值,你没有设法调试第一个滴答,而你只是在解释错误的值。
TotalDays
,TotalHours
和TotalMilliseconds
属性显示TimeSpan
转换为特定测量值的总值,它们不会一起形成值。
2秒与2000毫秒相同,与0.000555555小时相同。
如果要查看值中的组件,您应该查看Days
,Hours
,Minutes
,Seconds
和Milliseconds
属性。在那里,您会发现Seconds
属性为2
,其他所有属性均为零。
答案 1 :(得分:3)
我认为你误读了TotalDays的价值。当我运行类似代码时,我的TotalDays
值为1.15740740740741E-05
。这可能是有道理的,一秒钟可能只是一天的一小部分。
Total*
属性代表TimeSpan
的整体价值,而不是TimeSpan
每个部分的离散价值。
Days
,Hours
和Minutes
都将为0,但Total*
属性将代表整个值,即使这些部分是小数的。< / p>