C# 计算c天内的时间差#
我正在尝试设置一个录制时间标签,这样当用户单击一个按钮时,它就会启动,当他们单击另一个按钮时,它就会停止 我试过两种不同的方法,但都不奏效C# 计算c天内的时间差#,c#,wpf,timer,C#,Wpf,Timer,我正在尝试设置一个录制时间标签,这样当用户单击一个按钮时,它就会启动,当他们单击另一个按钮时,它就会停止 我试过两种不同的方法,但都不奏效 设置一个股票代码,将一个值增加1并显示它。 这不起作用,因为我也在做其他事情,这意味着它可能需要1.5秒,但我的增量为1,因此录制时间越长,它就越不准确 获取流开始时的日期时间,并使用ticker方法获取日期时间并将其减去。 这是不起作用的,因为如果整晚都不录音,时间就会变短,即-67647.74秒 有没有人对我如何显示一个好的计时器有其他想法。你的\u s
有没有人对我如何显示一个好的计时器有其他想法。你的
\u streamStartTime
也应该是日期时间。然后在事件处理程序中,单击事件处理程序,分配日期时间。现在给它,不要只使用TimeOfDay
:
private void StreamClick_Click(object obj)
{
_streamStartTime = DateTime.Now;
}
然后在计算中,只需对这两个DateTime
求反即可得到TimeSpan
。使用TimeSpan
生成您的时间字符串
:
private void LiveVideoStream_Tick(VideoCaptureDevice cam)
{
TimeSpan _currentRecordTime = DateTime.Now - _streamStartTime;
string RecordTime = _currentRecordTime.TotalDays.ToString() + " " + _currentRecordTime.Hours.ToString() + ":" +
_currentRecordTime.Minutes.ToString() + ":" + _currentRecordTime.Seconds.ToString();
}
现在不要使用DateTime,因为系统时钟很少会向后或向前跳。DateTime.UtcNow安全得多-没有夏令时-但仍然不是防弹的
你应该改用秒表。不要只依赖时间,而是将整个日期时间相互减去。\u streamStartTime
也应该是一个DateTime
,然后用DateTime指定它。现在,当你点击时。减去这两个值,您得到了TimeSpan
,使用单击中的TimeSpan
,我不能分配DateTime。现在
因为这不是TimeSpan
?重要的一点是您的\u streamStartTime
应该是DateTime
。然后,当你减去两个DateTime
,你会得到一个TimeSpan
TimeSpan
是处理时差的一个很好的struct
。它有许多有用的属性/字段,如天、小时、分钟、秒、毫秒,以及TotalDays、TotalHours、TotalMinutes、TotalSeconds等。。。试试看!是的,这似乎现在起作用了TimeSpan
确实提供了很多属性。有一个问题,我没有使用。“TotalDays”
我可以使用。“Days”
作为。“TotalDays”
返回给我一个巨大的数字,我只想显示像0,1,2,3,4,5
这样的数字。然后你可以将TotalDays
转换为int
,只是为了去掉分数。您还可以使用Math.Round
。类似于((int)(_currentRecordTime.TotalDays)).ToString()之类的内容。或者,只需使用天
我有点晚了,但我必须同意这是“最安全”的解决方案。
private void LiveVideoStream_Tick(VideoCaptureDevice cam)
{
TimeSpan _currentRecordTime = DateTime.Now - _streamStartTime;
string RecordTime = _currentRecordTime.TotalDays.ToString() + " " + _currentRecordTime.Hours.ToString() + ":" +
_currentRecordTime.Minutes.ToString() + ":" + _currentRecordTime.Seconds.ToString();
}