2014-01-24 4 views
0

Привет Я получаю недопустимый литой из double to datetime error при запуске моего кода ASP.NET MVC.Недопустимый листинг из double to datetime error

Это мой код:

Update: Привет Я добавляю свой полный код ниже. Пожалуйста, изучите это.

 Boolean locked = false; 
     if (frmcollection["lockStart"] != null && frmcollection["lockStart"] != "") 
     { 
      locked = Convert.ToBoolean(frmcollection["lockStart"].ToString()); 

     } 
     else if (datelock == "") 
     { 
      locked = Convert.ToBoolean("0"); 
     } 
     Boolean valid = true; 
     double inteval = 86400000 * Convert.ToDouble(frmcollection["autoFrequency"].ToString()); 

     DateTime schedulestartDate = Convert.ToDateTime(frmcollection["autoStart"].ToString()); 

     int startHour = Convert.ToInt32(frmcollection["autoStartHour"].ToString()); 
     DateTime sd = schedulestartDate; 

     sd.AddHours(startHour); 


     DateTime filterStart = Convert.ToDateTime(frmcollection["periodStart"].ToString()); 

     int filterStartHour = Convert.ToInt32(frmcollection["periodStartHour"].ToString()); 
     DateTime fsd = filterStart; 

     fsd.AddHours(filterStartHour); 

     DateTime filterEnd = Convert.ToDateTime(frmcollection["periodEnd"].ToString()); 

     int filterEndHour = Convert.ToInt32(frmcollection["periodEndHour"].ToString()); 
     DateTime fed = filterEnd; 

     fed.AddHours(filterEndHour); 


     double sDate = sd.Second; 
     double sPeriod = sDate - fsd.Second; 
     double ePeriod = sDate - fed.Second; 

     if (sPeriod < ePeriod || sPeriod < 0 || ePeriod < 0) 
     { 
      valid = false; 
     } 

     if (valid) 
     { 
      for (int i = 0; i < 5; i++) 
      { 
      DateTime date = Convert.ToDateTime(sDate + (inteval * i)); 

       if (locked) 
       { 
        DateTime psdate = Convert.ToDateTime(sDate - sPeriod); 
       } 
       else 
       { 
        DateTime psdate = Convert.ToDateTime(sDate + (inteval * i) - sPeriod); 
       } 
       DateTime pedate = Convert.ToDateTime(sDate + (inteval * i) - ePeriod); 

      } 
     } 
     else 
     { 

     } 

Когда я отладки я получаю ошибку в этой строке:

DateTime date = Convert.ToDateTime(sDate + (inteval * i)); 

Может кто-то помочь мне в этом ??

+0

Ваши значения выглядят как часть 'TimeSpan', как вы ожидаете преобразовать несколько секунд в объект типа DateTime? – Habib

+1

Вы пытались использовать DateTime.FromSeconds? – shirbr510

+0

@ shirbr510, где вы видите 'DateTime.FromSeconds' ?? Думаю, вы имели в виду «TimeSpan.FromSeconds» – Habib

ответ

2

Вы добавляете double к любому, что interval * i решает.

Вы не можете преобразовать (отличить) это в DateTime, что является именно тем, что говорит вам об ошибке.

+0

Привет, я редактировал свой пост. Я вставляю свой полный код. Взгляните на это, и если вы не возражаете, можете показать мне решение для этого? – Ajay

+0

Я не вижу, где вы используете 'date' после его назначения, поэтому я не уверен, что это за намерение. Похоже, что «inteval» - это количество миллисекунд в день, но затем вы умножаете это на произвольное число, так что вы пытаетесь добавить к дате? Секунды? Миллисекунды? –

0

DateTime имеет множество методов для выполнения расчетов на определенную дату. Например, DateTime.AddMillisecons, который принимает двойной и возвращает дату.

MSDN DateTime.AddMilliseconds

1

Кажется, как будто вы смотрите на дату некоторые (интервал * I) секунд после даты «сд». Если это так, попробуйте:

for (int i = 0; i < 5; i++) 
{ 
    DateTime date = sd.AddSeconds(inteval * i); 

    if (locked) 
    { 
       DateTime psdate = sd.AddSeconds(-sPeriod); 
      } 
      else 
      { 
       DateTime psdate = sd.AddSeconds((inteval * i) - sPeriod)); 
      } 
      DateTime pedate = sd.AddSeconds((inteval * i) - ePeriod); 
    } 
    //... 
+0

Привет, ваш код работает нормально, но я думаю, что в этой логике есть что-то не так. Я получаю неожиданные результаты, если я использую ваш код. – Ajay

+0

@ Ajay какой результат вы ожидали и какой результат вы получили? –

+0

@Ajay 'double inteval = 86400000 * Convert.ToDouble (frmcollection [" autoFrequency "]. ToString());' - похоже, что вы используете ms вместо секунд. –

Смежные вопросы