DateTime, .AddSeconds () не работает? - PullRequest
       0

DateTime, .AddSeconds () не работает?

0 голосов
/ 02 октября 2009

Я почесал голову над этим уже пару часов, я набрал сотрудников и мы все потерялись. Это может быть слишком много кофе из новой эспрессо-машины или тот факт, что сегодня пятница ... Мы не уверены!

У меня есть следующий метод:

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 любезно знает, сколько времени «вероятно» займет запуск, поэтому я надеюсь использовать эту информацию здесь, чтобы предсказать время «Start» и «Finish» каждого TestJob.

К сожалению, rollTime никогда не изменяется. Хотя job.getEstimatedRuntime () всегда возвращает положительное значение типа double, вызов AddSeconds () для текущего TestJob и передача этого значения не имеет никакого эффекта.

Есть ли в моем коде ошибка или что-то более зловещее?

Обновление: Я заметил, что этот вопрос все еще получает несколько просмотров. Для тех из вас, кто страдает от странной проблемы, подобной моей, я помню, как решил эту проблему, просто перезапустив Visual Studio / Rebooting . Я думаю, эта проблема все еще всплывает время от времени ... (Гм ...)!

Ответы [ 3 ]

5 голосов
/ 02 октября 2009

Создание небольшой тестовой программы на основе вашего кода:

  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 и отладьте / запишите все.

4 голосов
/ 01 сентября 2016

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

Этот метод не изменяет значение этого DateTime.Вместо этого он возвращает новый DateTime, значение которого является результатом этой операции.

2 голосов
/ 02 октября 2009

Это должно работать без проблем.

Я предлагаю вам попытаться преобразовать вопрос в короткую, но полную программу, которая демонстрирует проблему . Вы также можете добавить некоторые вход в систему - log rollingTime и estimatedRuntime на каждой итерации.

Кстати, есть ли причина, по которой вы используете соглашения Java в C #?

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...