Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/csharp/281.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
C# 计算c天内的时间差#_C#_Wpf_Timer - Fatal编程技术网

C# 计算c天内的时间差#

C# 计算c天内的时间差#,c#,wpf,timer,C#,Wpf,Timer,我正在尝试设置一个录制时间标签,这样当用户单击一个按钮时,它就会启动,当他们单击另一个按钮时,它就会停止 我试过两种不同的方法,但都不奏效 设置一个股票代码,将一个值增加1并显示它。 这不起作用,因为我也在做其他事情,这意味着它可能需要1.5秒,但我的增量为1,因此录制时间越长,它就越不准确 获取流开始时的日期时间,并使用ticker方法获取日期时间并将其减去。 这是不起作用的,因为如果整晚都不录音,时间就会变短,即-67647.74秒 有没有人对我如何显示一个好的计时器有其他想法。你的\u s

我正在尝试设置一个录制时间标签,这样当用户单击一个按钮时,它就会启动,当他们单击另一个按钮时,它就会停止

我试过两种不同的方法,但都不奏效

  • 设置一个股票代码,将一个值增加1并显示它。
  • 这不起作用,因为我也在做其他事情,这意味着它可能需要1.5秒,但我的增量为1,因此录制时间越长,它就越不准确

  • 获取流开始时的日期时间,并使用ticker方法获取日期时间并将其减去。
  • 这是不起作用的,因为如果整晚都不录音,时间就会变短,即-67647.74秒


    有没有人对我如何显示一个好的计时器有其他想法。

    你的
    \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();
    
    }