2009-10-02 73 views
0

我一直在爲這個問題撓撓頭幾個小時,現在我已經在同事中起草了,而且我們都迷了路。這可能是來自新款咖啡機的咖啡太多,或者是星期五的事實......我們不確定!DateTime,.AddSeconds()不起作用?

我有以下方法:

private void calcuateEstimatedExecutionTimesForDueJobs(List<TestJob> dueJobs) 
{ 
    DateTime rollingTime = DatabaseConnection.getNow(); 

    foreach (TestJob job in dueJobs) 
    { 
     job.setEstimatedStart(rollingTime); 

     double estimatedRuntime = job.getEstimatedRuntime(); 

     rollingTime = rollingTime.AddSeconds(estimatedRuntime); 

     job.setEstimatedFinish(rollingTime); 
    } 
} 

的意圖是要處理的我們的應用程序正在排隊等待交付「TestJobs」的列表。我們的TestJob很清楚它可能需要多長時間才能運行,所以我希望在這裏使用這些信息來預測每個TestJob的「開始」「完成」時間。

不幸的是,rollingTime從不改變。儘管job.getEstimatedRuntime()總是返回一個正數double,但在當前TestJob上調用AddSeconds()並傳遞此值不起作用。

在我的代碼中是否存在錯誤,或者是更險惡的東西?

更新:我注意到這個問題仍然有一些意見。對於那些遇到像我這樣的奇怪問題的人,我記得簡單地通過解決這個問題,重新啓動Visual Studio/Rebooting。我想這個問題仍然會不時出現......(Ahem ......)!

+0

看起來不錯,你確定估計運行時間不是0? – scottm 2009-10-02 14:33:37

+4

這是一個非常小的正面雙?日期時間只有分辨率下降到幾毫秒。如果它小於... – 2009-10-02 14:34:08

+0

我用你的結構運行了一個測試用例,只是使用了虛擬值,並且它工作正常。因此,請仔細檢查您是否檢查了'rollingTime'正在更改的工作是否正常,並仔細檢查您要添加的值。 – bdukes 2009-10-02 14:37:10

回答

5

創建基於代碼中的小測試程序:

public class Program 
    { 
    public static void Main(string[] args) 
    { 
     List<TestJob> jobList = new List<TestJob>(); 

     jobList.Add(new TestJob() { ID = 1 }); 
     jobList.Add(new TestJob() { ID = 2 }); 
     jobList.Add(new TestJob() { ID = 3 }); 
     jobList.Add(new TestJob() { ID = 4 }); 

     CalcuateEstimatedExecutionTimesForDueJobs(jobList); 

     foreach (TestJob job in jobList) 
     { 
     Console.WriteLine("{0} {1} {2}", job.ID, job.StartDate, job.FinishedDate); 
     } 
     Console.ReadLine(); 
    } 

    private static void CalcuateEstimatedExecutionTimesForDueJobs(List<TestJob> dueJobs) 
    { 
     DateTime rollingTime = DateTime.Now; 

     foreach (TestJob job in dueJobs) 
     { 
     job.SetEstimatedStart(rollingTime); 

     double estimatedRuntime = job.GetEstimatedRuntime(); 
     rollingTime = rollingTime.AddSeconds(estimatedRuntime); 

     job.SetEstimatedFinish(rollingTime); 
     } 
    } 
    } 

    public class TestJob 
    { 
    public int ID { get; set; } 
    public DateTime StartDate { get; set; } 
    public DateTime FinishedDate { get; set; } 
    public void SetEstimatedStart(DateTime date) 
    { 
     this.StartDate = date; 
    } 
    public void SetEstimatedFinish(DateTime date) 
    { 
     this.FinishedDate = date; 
    } 

    public double GetEstimatedRuntime() 
    { 
     return 42; //Answer to Life, the Universe, and Everything 
    } 

    } 

表明一切正常。控制檯輸出是:

1 02.10.2009 17:08:43 02.10.2009 17:09:25 
2 02.10.2009 17:09:25 02.10.2009 17:10:07 
3 02.10.2009 17:10:07 02.10.2009 17:10:49 
4 02.10.2009 17:10:49 02.10.2009 17:11:31 

這就是,據我所知道的正確。 請仔細檢查您的TestJob類中的相關代碼並調試/記錄所有內容。

+0

感謝您的支持。我可以確認這個示例程序正常工作,因爲我希望我的方法能夠! :) 回頭抓。 – Mike 2009-10-02 15:05:41

+0

你的努力被讚賞。我使用這段代碼來幫助我解決問題。對此,我仍然不知道是什麼原因造成的!無論我是努力=獎勵的堅定信徒,這就是爲什麼我接受這個作爲我的答案。謝謝。 – Mike 2009-10-02 15:36:36

2

這應該沒有任何問題。

我建議你嘗試將問題轉換爲short but complete program which demonstrates the problem。您可能還需要在每次迭代中添加一些日誌記錄 - 日誌rollingTimeestimatedRuntime

順便說一句,你在C#中使用Java約定的任何原因?

+0

你抓到我了!我是C#的新手,擁有Java背景。我會模擬一個小程序,看看我能否在其他地方複製這個錯誤。 – Mike 2009-10-02 14:58:32

+0

只需複製/粘貼我的例子,你就在那裏。 – 2009-10-02 15:05:38

+0

感謝您的幫助,我添加了日誌並觀察了我期待的結果。我刪除了日誌,但仍然看到了預期的結果。我不知道這是什麼或它來自哪裏,但問題得到糾正。矩陣中的毛刺? – Mike 2009-10-02 15:34:07