DateTime,.AddSeconds()不起作用?

Mik*_*ike 0 c# datetime

我已经在这个问题上摸不着头几个小时了,我已经和同事起草了,我们都迷失了.这可能是新浓缩咖啡机过多咖啡的情况,或者是周五的事实......我们不确定!

我有以下方法:

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);
    }
}
Run Code Online (Sandbox Code Playgroud)

目的是处理我们的应用程序排队等待提供的"TestJobs"列表.我们的TestJob知道"可能"需要多长时间才能运行,所以我希望在这里使用这些信息来预测每个TestJob的"开始"和"完成"时间.

不幸的是,rollingTime永远不会改变.虽然job.getEstimatedRuntime()始终返回正双精度数,但在当前TestJob上调用AddSeconds()并传递此值无效.

我的代码中有错误,还是更险恶的东西?

更新:我注意到这个问题仍然有一些观点.对于那些像我一样遭遇奇怪问题的人,我记得只需重启Visual Studio/Rebooting即可解决这个问题.我想这个问题还时不时出现......(咳咳......)!

小智 6

OBS:参考https://msdn.microsoft.com/en-us/library/system.datetime.addseconds(v=vs.110).aspx

此方法不会更改此 DateTime 的值。相反,它返回一个新的 DateTime,其值是此操作的结果。


Mag*_*son 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
    }

  }
Run Code Online (Sandbox Code Playgroud)

显示一切都按预期工作.控制台输出是:

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
Run Code Online (Sandbox Code Playgroud)

就我而言,这是正确的.请仔细检查TestJob类中的相关代码并调试/记录所有内容.