2015-06-19 54 views
-2

我有,我發現了一個DateTime.Now全局變量一旦我點擊一個按鈕:如何計算存儲的DateTime.Now和當前的DateTime.Now之間的差異?

dt = DateTime.Now; 

然後,progresschanged事件中我做:

var currentTime = DateTime.Now; 

現在我需要以秒爲單位計算currentTime和存儲時間(dt)之間的差值。然後我需要以秒爲單位劃分差異BytesSent。

這是我使用的progresschanged事件:

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,所以我由零上averageSpeed得到例外着鴻溝。

爲什麼diffSeconds是0?試圖計算dt和currentTime之間的時間差。

編輯

這就是我現在做的:

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); 
      } 

但得到錯誤,現在的長averageSpeed着轉換型雙長。

這是我用來轉換爲兆字節的方法:

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

而在BackgroundWorker的progresschanged事件:

label8.Text = stringProgressReport[4]; 

我怎麼能向用戶顯示的東西更好?例如速度如下:

平均速度爲:0.5 MB/s,然後是0.9 MB/s,然後是1.6 MB/s這種格式或其他更好的。

+3

減去兩個日期時間對象產生時間跨度,這有一個TotalSeconds屬性。 – asawyer

+1

您可能需要查看https://msdn.microsoft.com/zh-cn/library/8ysw4sby(v=vs.110).aspx – sdeep

+0

您應該使用DateTime.UtcNow而不是DateTime.Now來避免無意義的結果夏時制轉換。 –

回答

2
var elapedSeconds = (DateTime.Now-dt).TotalSeconds; 
3

你可以簡單。減去2個DateTime對象:

TimeSpan diff = currentTime - dt; 
int diffSeconds = (int) diff.TotalSeconds; 
0

你需要防禦式編程的一點點,防止異常:

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