从double到datetime错误的无效转换

时间:2014-01-24 17:01:03

标签: c# asp.net

嗨,当我运行ASP.NET MVC代码时,我从double到datetime错误得到无效的转换。

这是我的代码:

更新:您好我在下面添加完整代码。请仔细看看。

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

有人可以帮助我吗?

3 个答案:

答案 0 :(得分:2)

您正在为double结果添加interval * i

您无法将其转换(强制转换)为DateTime,这正是错误告诉您的内容。

答案 1 :(得分:1)

好像你在日期“sd”之后寻找一些日期(间隔* 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);
   }
   //...

答案 2 :(得分:0)

DateTime有很多方法可以在特定日期执行计算。例如DateTime.AddMillisecons,它取一个double并返回一个日期。

MSDN DateTime.AddMilliseconds