如何计算存储的日期时间.Now和当前日期时间.Now之间的差异



我有一个全局变量,我正在获取日期时间。现在,一旦我单击一个按钮:

dt = DateTime.Now;

然后在我正在做的进度更改事件中:

var currentTime = DateTime.Now;

现在我需要以秒为单位计算当前时间和存储时间(dt)之间的差异。然后我需要将字节除以秒为单位的差。

这是我正在使用的进度更改事件:

double mbSent = 0;
        int percentComplete = 0;
        static string progress = "";
        static string ttt = "";
        private void videosInsertRequest_ProgressChanged(IUploadProgress obj)
        {
            stringProgressReport[1] = obj.Status.ToString();
            backgroundWorker1.ReportProgress(0, 1);
            mbSent = ((double)obj.BytesSent) / (1 << 20);
            stringProgressReport[2] = mbSent.ToString();
            backgroundWorker1.ReportProgress(0, 2);
            percentComplete = (int)Math.Round(((double)obj.BytesSent) / totalBytes * 100);
            stringProgressReport[3] = percentComplete.ToString();
            backgroundWorker1.ReportProgress(0, 3);
            var currentTime = DateTime.Now;
         }

在事件的底部,我需要进行计算,这样我就可以报告平均速度。文件上传速度。

编辑

我在执行以下操作时遇到异常:

var currentTime = DateTime.Now;
TimeSpan diff = currentTime - dt;
int diffSeconds = (int)diff.TotalSeconds;
long averageSpeed = obj.BytesSent / diffSeconds;

都obj。BytesSent 和 diffSeconds 是 0,所以我得到异常不能在平均速度上除以零。

为什么差异秒是 0 ?尝试计算dt和当前时间之间的时间差。

编辑

这就是我现在所做的:

if (obj.BytesSent != 0)
            {
                var currentTime = DateTime.Now;
                TimeSpan diff = currentTime - dt;
                var diffSeconds = (DateTime.Now - dt).TotalSeconds;
                long averageSpeed = diffSeconds != 0 ? obj.BytesSent / diffSeconds : 0L;
                double MBunits = ConvertBytesToMegabytes(averageSpeed);
                stringProgressReport[4] = MBunits.ToString();
                backgroundWorker1.ReportProgress(0, 4);
            }

但是现在在长平均速度上出现错误无法将类型转换为长。

这是我用来转换为兆字节的方法:

static double ConvertBytesToMegabytes(long bytes)
        {
            return (bytes / 1024f) / 1024f;
        }

在后台工人进度更改事件中:

label8.Text = stringProgressReport[4];

我怎样才能向用户展示更好的东西?例如速度,例如:

平均速度为:0.5 MB/s,然后0.9 MB/s,然后1.6 MB/s这种格式或其他更好的格式。

您可以

简单地减去两个DateTime对象:

TimeSpan diff = currentTime - dt;
int diffSeconds = (int) diff.TotalSeconds;
var elapedSeconds = (DateTime.Now-dt).TotalSeconds;

你需要一点防御性编程来防止异常:

var diffSeconds = (DateTime.Now - dt).TotalSeconds;
long averageSpeed = diffSeconds !=0 ? obj.BytesSent / diffSeconds : 0L;

相关内容

  • 没有找到相关文章

最新更新